Bash

何時在 shell 腳本中使用重定向到 stderr

  • August 11, 2013

我知道像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。

引用自:https://unix.stackexchange.com/questions/79315