私はbashスクリプトを書いていて、実行したコマンドの出力を単一のファイルにリダイレクトする必要がありstdout
、それに応じstderr
て各行の前にstderr
orを付けますstdout
。
これを行う簡単な方法はありますか?
これを試して:
(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile
最初のパイプは、stdout:
プレフィックスを の標準出力に挿入し、myCommand
それを に追加しmyLogFile
ます。
括弧は、それらすべての単一のコマンドを作成するために使用されます。彼らは、さらなるリダイレクトが括弧内に適用されるだけでなく、括弧内に適用されることを伝えていますsed
.
次に、標準エラーは標準出力にリダイレクトされます2>&1
(元の標準出力は既に にリダイレクトされていることに注意してmyLogFile
ください)。2 番目のパイプはそれにプレフィックスを挿入し、stderr:
それを に追加しmyLogFile
ます。
Debianのdevscriptsのannotate-outputがこれを行います。
そのマニュアルページの例:
$ annotate-output make 21:41:21 I: メイク開始 21:41:21 O: gcc -Wall program.c 21:43:18 E: program.c: コンパイルできませんでした。調べるのに何年もかかりました 21:43:19 E: collect2: ld が 1 つの終了ステータスを返しました 21:43:19 E: make: *** [すべて] エラー 1 21:43:19 I: 終了コード 2 で終了