2>&1是什麼意思?介紹輸出重新導向
剛開始接觸shell腳本,看到指令後面接著「2>&1」感到茫然,孰悉輸出重新導向符號「>」,就不難理解,首先要介紹檔案描述符。 檔案描述符 檔案描述符共有3個,1個輸入,2個輸出,如下表 值 stdio.h 名稱 中譯 0 stdin Standar Input 標準輸入 1 stdout Standar Output 標準輸出 2 stderr Standar Error 標準錯誤輸出 將輸出文字記錄於檔案中 將文字記錄於檔案,普遍的寫法為 echo "standar output" > file.txt 其實在「>」前面省略了1,也就是標準輸出(stdout),完整的寫法應為 echo "standar output" 1> file.txt 檔案描述符1是預設值,通常省略不寫,而在「>」後有無空格都是符合語法的,可依個人程式風格自訂。 假設指令輸出有錯誤訊息,例如當前目錄沒有xxx這個檔案,用ls去列出xxx就會出錯,執行顯示為 $ ls xxx ls: cannot access 'xxx': No such file or directory 把標準錯誤輸出(stderr)記錄於檔案中,可寫作 ls xxx 2> file.txt 就可以將「ls: cannot access 'xxx': No such file or directory」存於file.txt。 另一種常見的應用,是想不顯示錯誤訊息,就把標準錯誤輸出丟進/dev/null。 ls xxx 2> /dev/null 導向檔案描述符 若想將「標準輸出」、「標準錯誤輸出」合併,一般的作法是將「標準錯誤輸出」併入「標準輸出」。但若寫為 ls xxx 2>...