Shell
2>&-、2>/dev/null、|&、&>/dev/null 和 >/dev/null 2>&1 之間的區別
只是尋找之間的區別
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
以及它們與非 Bourne shell(如
tcsh
,mksh
等)的可移植性。
背景:
- 數字1 = 標準輸出(即 STDOUT)
- 數字2 = 標準錯誤(即 STDERR)
- 如果沒有明確給出數字,則shell (bash) 假定數字 1
首先讓我們解決這些功能。有關參考,請參閱Advanced Bash-Scripting Guide。
職能
2>&-
這個的一般形式是
M>&-
,其中**“M”是文件描述符編號。這將關閉所引用的任何文件描述符的輸出,即“M”**。
2>/dev/null
這個的一般形式是
M>/dev/null
,其中**“M”是文件描述符編號。這會將文件描述符“M”**重定向到/dev/null
.
2>&1
這個的一般形式是
M>&N
,其中**“M”和“N”是文件描述符編號。它將文件描述符“M”和“N”**的輸出組合成一個流。
|&
這只是 的縮寫
2>&1 |
。它是在 Bash 4 中添加的。
&>/dev/null
這只是 的縮寫
>/dev/null 2>&1
。它將文件描述符 2 (STDERR) 和描述符 1 (STDOUT) 重定向到/dev/null
.
>/dev/null
這只是 的縮寫
1>/dev/null
。它將文件描述符 1 (STDOUT) 重定向到/dev/null
.可移植到非 bash、tcsh、mksh 等。
我對
csh
and之外的其他 shell 處理的不多tcsh
。與 bash 的重定向運算符相比,我對這 2 個的經驗是 bash 在這方面更勝一籌。有關更多詳細資訊,請參見tcsh 手冊頁。csh/tcsh 直接支持您詢問的命令中的任何一個。您必須使用不同的語法來構造類似的函式。