Linux與命令列基礎
$ ls
a.txt
$ ls a.txt nofile 2>&1 > out.txt如上所示,在有 a.txt、沒有 nofile 的目錄中執行最後一個指令。結果是下列何者?
- A只有錯誤的那一行寫入 out.txt,a.txt 那一行顯示在畫面上
- B錯誤的那一行和 a.txt 那一行都寫入 out.txt,畫面上什麼都不顯示
- C只有 a.txt 那一行寫入 out.txt,錯誤的那一行顯示在畫面上
查看答案與解析
正確答案:C. 只有 a.txt 那一行寫入 out.txt,錯誤的那一行顯示在畫面上
重新導向是由左而右依序處理的。「2>&1」的意思是「讓標準錯誤輸出(2)的去向與當下的標準輸出(1)相同」,而此時標準輸出仍是畫面,所以錯誤會出現在畫面上。之後的「> out.txt」只把標準輸出改到 out.txt,因此檔案中只會寫入 ls 一般輸出的 a.txt 那一行。若要兩者都寫入檔案,應像「ls a.txt nofile > out.txt 2>&1」那樣,先改變標準輸出再寫 2>&1。
- A. 2>&1 是把標準錯誤輸出導向「當下」標準輸出的去向,也就是畫面。錯誤不會進入 out.txt。
- B. 這是依「> out.txt 2>&1」的順序撰寫時的結果。順序對調,結果就會改變。
- C. 正確。在 2>&1 的時間點標準輸出是畫面,所以錯誤出現在畫面上。