stdoutとstderrをリダイレクトし、stderrはタイムスタンプのみを使用します。

stdoutとstderrをリダイレクトし、stderrはタイムスタンプのみを使用します。

私が書いていないテストプログラムをよりよく文書化しようとしています。 STDERR出力のすべての行にタイムスタンプがあることを望みますが、可能であればSTDOUTを保存したいと思います。また、stdoutとstderr(STDERRタイムスタンプの有無にかかわらず)を記録するためのファイル(all.txt)とSTDERR出力専用ファイル(タイムスタンプ付きのerrors.txt)も必要です。

返品、ターミナルで何も鳴っても構いません。。これはバッチスタイルプログラムです。

後で出てくるrsyslogを見ましたが、これは本当に速く解読できるソリューションです。少なくとも、出力リダイレクトについてもっと学んだら。似たような質問をたくさん読んだが、この特定の事例とは関係がないようです。

stderr出力にタイムスタンプを追加するためにパイプとこの質問のスキルを使用したいと思います。https://serverfault.com/questions/310098/adding-a-timestamp-to-bash-script-log

ここで最もクリーンな解決策は何ですか?私のRHEL5システムはbash 3.2.25を実行しています。

            +----stdout-------------------+
           /                               \
test.pl --+                                 +--> all.txt
           \                               /
            +----stderr | add_timestamps -+----> errors.txt

ベストアンサー1

私はこれがあなたが望むことをするだろうと思います:

test.pl 2>&1 >all.txt | add_timestamps | tee -a all.txt > errors.txt

  • stderrをstdoutにリダイレクトする(後でパイプできるように)
  • (raw) 標準出力を次にリダイレクトall.txt
  • pipe stdout(現在のエラーメッセージを含む)を次にリンクします。add_timestamps
  • teeエラー(タイムスタンプを含む)を追加するために使用されます。all.txt
  • 最後に、エラーは次にも記録されます。errors.txt

おすすめ記事