Hugo Future Imperfect Slim

Blackdiz's Garage

心得、筆記、雜記

1 分鐘

小記一下 command 2>&1 > /dev/nullcommand > /dev/null 2>&1 的差別。首先先看 2>&1 的意思。在 Linux 的 file descriptor 中,1 表示 stdout (標準輸出) 表示程式執行中輸出訊息的地方,預設為 terminal。而 2 表示 stderr (標準錯誤輸出) 表示程式執行中發生錯誤時輸出錯誤訊息的地方,預設也是 terminal。

> 表示把 > 前方的輸出都導到 > 後方的目標。

>& 表示把 >& 前的 file descriptor 指向 >& 後方的 file descriptor,& 表示目標是 file descriptor 而不是檔案。

/dev/null 是個特殊的目標,任何輸入到它的訊息都會消失不會輸出到任何其他地方。

在了解各部分的作用後,現在把它們組合起來看,command 2>&1 > /dev/null 表示執行 command,把 stderr 輸出的目標指向 stdout 目前輸出的目標,因為 stdout 目前指向的目標是 terminal,所以 stderr 指向的目標就變成 terminal,最後 > /dev/null 表示把 stdout 輸出的目標指向 /dev/null,所以最終執行的結果就是 stderr 會輸出到 terminal 而 stdout 會輸出到 /dev/nullcommand > /dev/null 2>&1 則是執行 command,> /dev/null 會把 stdout 輸出目標指向 /dev/null,而最後面的 2>&1 會再把 stderr 輸出的目標指向目前 stdout 的輸出目標,所以也同樣變成 /dev/null,因此最終執行結果會是 stdout 和 stderr 都會輸出到 /dev/null 中。

所以結論是 command 2>&1 > /dev/null 依然會輸出錯誤訊息到 terminal 上,而 command > /dev/null 2>&1 則不會輸出任何訊息。


參考資料:

如果有什麼想法或需要指正的地方,歡迎您留言或來信 😄

說些甚麼

留言

最新文章

分類

關於

I'm so weak, so I learn from every master for things that I don't know