2>&1使用
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
六 參考
1)http://docstore.mik.ua/orelly/unix/upt/ch45_21.htm
2)http://www.unix.com/shell-programming-scripting/34011-meaning-dev-null-2-1-a.html
3)http://docstore.mik.ua/orelly/unix/upt/ch08_13.htm