2017-10-26 17 views
0

私はリダイレクトしようとしている:リダイレクト画面上の標準エラー出力とファイル、同じファイルに標準出力のみ

  • 標準エラー出力:画面を、
  • 標準出力のoutput.txtファイル:のみ
  • OUTPUT.TXT同じファイルを

(cronジョブ用)

私が達成しようとしている目標は、エラーがある場合にのみ、出力全体をファイルに記録しながら通知することです。

電子メールメッセージには、多くの場合、エラーメッセージを読み取るだけで問題を認識して解決できるため、これらのエラーメッセージを含める必要があります。すべての種類のエラーについて通知する必要があります。スクリプトはstderrにも独自のエラーを出力します。

エラーがスローされたときにスクリプトが何をしていたのかを知るのに便利なので、出力全体を同じファイルに記録する必要があります。

既存のログファイルは既に切り捨てられている必要があります。

答えて

0

はそれを見つけた:

exec 4>output.log; ./script 2> >(tee >(cat - >&4)) 1>&4 

注:

  • をファイル記述子を使用すると、stdoutがすでにリダイレクトされ、同じファイルにティーを使用するときに競合状態を避けるために必須です。
  • exec 4>output.logで、exec 4<>output.log以外の場合、ファイルは切り捨てられません。
  • tee >(cat - >&4)は、このようなコマンドにファイル名ではなくファイル記述子を渡す構文です。
  • 2> >(tee ...)はstderrをteeコマンドにリダイレクトする構文です
関連する問題