Linux
“command.sh > /dev/null 2>&1”與“command.sh 2>&1 >/dev/null”有什麼區別
我的 crontab 上有許多 shell 和 python 腳本,它們以以下任一結尾:
command.sh > /dev/null 2>&1
或者
command.sh 2>&1 >/dev/null
我知道:
>
用於重定向
/dev/null
是一個黑洞,任何發送的數據都會被丟棄
2
是標準錯誤的文件描述符
>
用於重定向
&
是文件描述符的符號(沒有它,以下 1 將被視為文件名)
1
是標準輸出的文件描述符因此
command.sh >/dev/null 2>&1
將我的程序的輸出重定向到/dev/null。包括標準錯誤和標準輸出。兩者都有相同的結果並且工作正常,但是為什麼有些人使用第一種類型而有些人使用另一種呢?
這些命令正在執行兩個重定向:
> /dev/null
將標準輸出重定向到/dev/null
2>&1
將標準錯誤重定向到標準輸出正如您猜對的那樣,全域效果是標準輸出和標準錯誤都被重定向到
/dev/null
.這兩個重定向都意味著由 shell 解釋,而不是由實際呼叫的程序解釋;因此它們被附加到命令行的末尾。儘管它們的影響是累積的,但它們在邏輯上是不同的;因此可以按您喜歡的任何順序指定它們。
**TL;DR:**這兩個命令是完全等價的,區別純粹是裝飾性的。