在 Unix Like 環境下用 crontab 排程執行指令或 Shell Script 時, 很多時最後都會加上 “> /dev/null 2>&1”, 例如:
* * * * * /path/to/my-script.sh > /dev/null 2>&1
以下是對 “> /dev/null 2>&1” 分拆的解釋:
>: 是重新導向, 例如將指令的執行結果寫入到檔案, 而以上的例子是將 /path/to/my-script.sh 的執行結果重新導向到 /dev/null.
/dev/null: /dev/null 在 Unix 或 Linux 就像黑洞, 會將任何導入的東西吃掉, 簡單來說就是程式會照常執行, 但不會輸出任何執行結果.
2: 系統將標準輸入/輸出分成三個, 分別是 stdin (fd 是 0), stdout (fd 是 1), 及 stderr (fd 是 2), 在這裡 2 代表標準錯誤輸出 stderr.
>: 重新導向.
&: 設定使用 fd 代號, 如果 “> dev/null 2>&1” 沒有加上 “&”, 會視後面的 “1” 為檔案名稱, 而不是 fd.
1: fd 的標準輸出 stdout.
簡單來說, “> /dev/null 2>&1” 的意思, 是將左邊程式的所有標準輸出 stdout, 及標準錯誤輸出 stderr 導向到 /dev/null, 即左邊的程式只會執行, 而不會輸出任何程式執行的結果。
想問那 2>&1 的意思是“把stderr 輸出到stdout“的意思嗎?
按照你的結論,我只要./script.sh > /dev/null 就會讓左邊程式執行,且不輸出結果。
為什麼還要加上 2>&1 呢?
thanks
如果在執行指令時有出現錯誤,這時候你就會知道為什麼要加上 2>&1 了,加了它也就會把錯誤輸出給導到/dev/null 了
結論好像怪怪的? 應該是程式執行正常就不會有結果輸出,若程式發生異常會把錯誤訊息輸出至標準輸出 stdout?
結論沒錯 可以自己實驗看看, 1綁到null, 再把2綁到1, 所以1,2都會輸出到null
你好,這邊這陣子有看到 return 0 2> /dev/null 與 return 0 > /dev/null 2>&1 是一樣的作用嗎?