Shell-Script

除非非零退出程式碼,否則禁止輸出

  • June 20, 2018

除非程序以非零程式碼退出,否則抑制輸出(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 作業中非常方便。

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