(おそらく、一部のプログラムが入力ファイルのプロセス置換を受け入れないかどうかに関連していますか?)
一部のBash単体テストスクリプトでは、次のトリックを使用して、コマンドのstdoutとstderrをログに記録して表示しています。
command > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
このプロセスはstdoutへの出力を生成するため、$stdoutF
ファイルはデータを取得します。次に、データを出力しない別のコマンドを実行します。
diff -r "$source" "$target" > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
ただし、空のテストが実行される前に、このプロセスが常に正常に終了するようには見えません(shunit-ngを使用)。
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
100回の実行テストでは、これは25回失敗しました。
sync
ファイルの空性をテストする前に呼び出すだけで十分な場合:
sync
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
...および/またはコマンドのシーケンスを強制することによって機能する必要があります:
diff -r "$source" "$target" \
> >(tee "${stdoutF}"; assertNull 'Unexpected output to stdout' "$(<"$stdoutF")")
2> >(tee "${stderrF}" >&2)
...および/またはファイルの代わりに直接tee
それを行うことは可能ですか?assertNull
更新:sync
答えではありません-以下のGillesの応答を参照してください。
更新2 : stdout、stderr、およびstdout+stderrを同期的に保存するためにさらに議論が行われました。答えてくれてありがとう!