8

私はbashスクリプトを書いていて、実行したコマンドの出力を単一のファイルにリダイレクトする必要がありstdout、それに応じstderrて各行の前にstderrorを付けますstdout

これを行う簡単な方法はありますか?

4

2 に答える 2

11

これを試して:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile

最初のパイプは、stdout:プレフィックスを の標準出力に挿入し、myCommandそれを に追加しmyLogFileます。

括弧は、それらすべての単一のコマンドを作成するために使用されます。彼らは、さらなるリダイレクトが括弧内に適用されるだけでなく、括弧内に適用されることを伝えていますsed.

次に、標準エラーは標準出力にリダイレクトされます2>&1(元の標準出力は既に にリダイレクトされていることに注意してmyLogFileください)。2 番目のパイプはそれにプレフィックスを挿入し、stderr:それを に追加しmyLogFileます。

于 2010-03-12T12:26:24.430 に答える
11

Debiandevscriptsの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 で終了
于 2010-03-13T07:02:49.273 に答える