終了コードがゼロでない場合、出力を抑制します。

終了コードがゼロでない場合、出力を抑制します。

プログラムがゼロ以外のコードで終了しない限り、出力(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

答え2

これmoreutilsパッケージにはプログラムが含まれています。chronicこの目的のために。君はただそう呼んでる

chronic my_program args ...

cronの操作に非常に便利です。

関連情報