私はbashで複数のコマンドのパイプを使用しています。コマンドの1つが失敗するとすぐに、パイプライン全体ですべてのコマンドを終了するようにbashを設定する方法はありますか?シェルパイプ:1つのコマンドが失敗したときにすぐに終了します。
私の場合、最初のコマンド、たとえばcommand1
は、何らかの出力が出るまでしばらくの間実行されます。たとえば、command1
を(sleep 5 && echo "Hello")
に置き換えることができます。
今すぐcommand1 | false
は5秒後に失敗しますが、すぐには失敗しません。
この動作には、コマンドが生成する出力の量と関係があるようです。たとえば、find/| false
はすぐに戻ります。
一般に、なぜbashがこのように動作するのだろうと思います。 command1 | non-existing-command
のようなコードが一度に終了しないと便利な状況を想像できますか?
PS:中間ファイルを使用すると、中間結果が保存されるため、一時ファイルを使用することはできません。
PPS:set -e
もset -o pipefail
もこの現象に影響しないようです。
この質問は、http://unix.stackexchange.comにより適しています。あなたはおそらくそこに良い答えを得るでしょう。 – dogbane