轉:2>&1使用
一 相關知識
1)預設地,标準的輸入為鍵盤,但是也可以來自檔案或管道(pipe |)。
2)預設地,标準的輸出為終端(terminal),但是也可以重定向到檔案,管道或後引号(backquotes `)。
3) 預設地,标準的錯誤輸出到終端,但是也可以重定向到檔案。
4)标準的輸入,輸出和錯誤輸出分别表示為STDIN,STDOUT,STDERR,也可以用0,1,2來表示。
5)其實除了以上常用的3中檔案描述符,還有3~9也可以作為檔案描述符。3~9你可以認為是執行某個地方的檔案描述符,常被用來作為臨時的中間描述符。
二 執行個體
1)command 2>errfile : command的錯誤重定向到檔案errfile。
2)command 2>&1 | ...: command的錯誤重定向到标準輸出,錯誤和标準輸出都通過管道傳給下個指令。
3)var=`command 2>&1`: command的錯誤重定向到标準輸出,錯誤和标準輸出都指派給var。
4)command 3>&2 2>&1 1>&3 | ...:實作标準輸出和錯誤輸出的交換。
5)var=`command 3>&2 2>&1 1>&3`:實作标準輸出和錯誤輸出的交換。
6)command 2>&1 1>&2 | ... (wrong...) :這個不能實作标準輸出和錯誤輸出的交換。因為shell從左到右執行指令,當執行完2>&1後,錯誤輸出已經和标準輸出一樣的,再執行 1>&2也沒有意義。
三 "2>&1 file"和 "> file 2>&1"差別
1)cat food 2>&1 >file :錯誤輸出到終端,标準輸出被重定向到檔案file。
2)cat food >file 2>&1 :标準輸出被重定向到檔案file,然後錯誤輸出也重定向到和标準輸出一樣,是以也錯誤輸出到檔案file。
四 注意
通 常打開的檔案在程序推出的時候自動的關閉,但是更好的辦法是當你使用完以後立即關閉。用m<&-來關閉輸入檔案描述符m,用 m>&-來關閉輸出檔案描述符m。如果你需要關閉标準輸入用<&-; >&- 被用來關閉标準輸出。
五 同時輸出到終端和檔案 copy source dest | tee.exe copyerror.txt
***********************************************************
學習永遠不晚。——高爾基