stdoutとstderrをファイルに保存し、出力を再生成します。

stdoutとstderrをファイルに保存し、出力を再生成します。

出力を次のファイルにリダイレクトしました。

$ ./test.bash 2> >(sed 's/^/stderr: /' >> output) > >(sed 's/^/stdout: /' >> output)
$ cat output
  stdout: Hello World!
  stderr: error

元のコマンドの出力を正確に再現したいと思います./test.bash。私が試したことは次のとおりです。

$ cat output | tee >(grep '^stdout: '|sed 's/^stdout: //') >(grep '^stderr: '|sed 's/^stderr: //' 1>&2) >/dev/null 2>&1 | cat
  error
  Hello World!

明らかに、私は出力が正しい順序で行われることを望みます。これを行う最良の方法は何ですか?

ベストアンサー1

現在の文書によっては、次のことが可能です。

awk '
    /^stdout:/ { print substr($0, 9) } 
    /^stderr:/ { print substr($0, 9) > "/dev/stderr" }
    ' output

「録音スクリプト」を少し変更すると、よりエレガントになることがあります。

おすすめ記事