stderrをファイルにリダイレクトしますが、stderrが発生した場合にのみ生成しますか? [コピー]

stderrをファイルにリダイレクトしますが、stderrが発生した場合にのみ生成しますか? [コピー]

次のコマンドを実行しています。

parallel --spreadstdin --line-buffered 'some_command 2> `mktemp --tmpdir /tmp/stderr`' | do_something

秘密は、parallel多くのプロセスを作成してすべてのstderrファイルを取得することです。ほとんどは空だから面白くない。標準エラー出力が実際に発生した場合にのみ、シェルにstderrファイルを生成させるにはどうすればよいですか?

ベストアンサー1

私が知る限り、これは不可能です。シェルは右から左に読み込まれるため、ファイルが存在する場合は2> error作成されます。error私はこの問題を解決する方法がないと思います。

名前付きパイプを使用してその出力をテストするなど、いくつかの複雑なトリックを実行できますが、実際にはそれほど価値がないと思います。代わりに、inotify他の回答の指示に従うか、tmpファイルを作成して別の場所にコピーします(データが含まれている場合)。

tmp=$(mktemp); command 2> "$tmp"; [ -s "$tmp" ] && cp "$tmp" /path/to/log/files

おすすめ記事