Shell-Script
除非非零退出程式碼,否則禁止輸出
除非程序以非零程式碼退出,否則抑制輸出(stdout 和 stderr)的最佳方法是什麼?我在想:
quiet_success() { file=$(mktemp) if ! "$@" > "$file" 2>&1; then cat "$file" fi rm -f "$file" }
並執行
quiet_success my_long_noisy_script.sh
,但我不確定是否有更好的方法。我覺得這必須是其他人需要做的事情。對於上下文,我希望將其添加到我的 cron 腳本中,以便在它們失敗時通過電子郵件發送所有內容,但如果它們沒有失敗,則不會。
無論如何,您都必須在某處緩衝輸出,因為您需要等待退出程式碼才能知道該做什麼。這樣的事情可能是最簡單的:
$ output=`my_long_noisy_script.sh 2>&1` || echo $output
該
moreutils
軟體包包含一個chronic
用於此目的的程序。你就這麼稱呼它chronic my_program args ...
在 cron 作業中非常方便。