プログラムがゼロ以外のコードで終了しない限り、出力(stdoutとstderr)を抑制する最良の方法は何ですか?私は考えています:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
そしてrunningを実行しますquiet_success my_long_noisy_script.sh
が、より良い方法があるかどうかはわかりません。これは他の人も必ずしなければならないことだと思います。
状況に応じてこれをcronスクリプトに追加して、失敗した場合はすべての内容を含む電子メールを受け取りますが、失敗した場合はそうしないようにしたいと思います。
答え1
とにかく、出力をどこかにバッファリングする必要があります。終了コードが何をすべきかを知るまで待つ必要があるからです。次のようなものがおそらく最も簡単です。
$ output=`my_long_noisy_script.sh 2>&1` || echo $output