Linux與命令列基礎

$ ls
a.txt
$ ls a.txt nofile 2>&1 > out.txt

如上所示,在有 a.txt、沒有 nofile 的目錄中執行最後一個指令。結果是下列何者?

  1. A只有錯誤的那一行寫入 out.txt,a.txt 那一行顯示在畫面上
  2. B錯誤的那一行和 a.txt 那一行都寫入 out.txt,畫面上什麼都不顯示
  3. 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 的時間點標準輸出是畫面,所以錯誤出現在畫面上。
練習這個領域 前往領域頁面

Linux與命令列基礎的其他題目

  1. 在上面的操作中,最後一個指令輸出的值是下列何者?
  2. 在上面的操作中,最後的 grep 輸出的行是下列何者?
  3. 選項中省略行首的空白。在上面的操作中,最後的管線輸出的行是下列何者?
  4. 想讓之後附加到伺服器日誌檔 /var/log/app.log 的行,在每次附加時持續顯示在畫面上。適當的指令是下列何者?
  5. 上面這個從逗號分隔的行取出欄位的指令,其輸出是下列何者?