Bash
何時在 shell 腳本中使用重定向到 stderr
我知道像grep這樣行為良好的實用程序將“正常”消息輸出到標準輸出,並將錯誤消息輸出到標準錯誤。
$ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory
當我自己編寫 shell 腳本時,我經常發現很難決定我應該在 stderr 上顯示什麼輸出和哪些消息,或者我是否應該打擾。
我想知道好的做法:什麼時候需要將一些消息重定向到 stderr 並且是合理的,什麼時候不需要?
“這取決於”,當然,但你有什麼見解可以幫助我做出這些決定嗎?
為了使這個主觀問題符合格式,我想鼓勵回答“為什麼”,並以經驗為依據,並在可能的情況下以事實為依據。
當我自己編寫 shell 腳本時,我經常發現很難決定我應該在 stderr 上顯示什麼輸出和哪些消息,或者我是否應該打擾。
沉默是金。如果一切正常,則不輸出任何內容。
我想知道好的做法:什麼時候需要將一些消息重定向到 stderr 並且是合理的,什麼時候不需要?
將 stderr 與 stdout 分開的最簡單方法:想像一下您的所有腳本輸出將通過管道重定向到另一個命令。在這種情況下,您應該將所有通知保留在 stderr 中,因為 stdout 中的此類意外資訊可能會破壞管道序列。
有時也在這樣的管道中:
command1 | while read line ; do command2 ; done | command3
您需要將某些內容傳遞
command2
給使用者輸出。沒有臨時文件的最簡單方法是 stderr。