私は次のスクリプトがありますmy-binaryがkillされたときに "tee /tmp/my.log | my-binary"がすぐに終了しないのはなぜですか?
#!/bin/bash
set -e
set -o pipefail
tee /tmp/my.log | my-binary
my-script.sh ...次のように実行します。私のバイナリクラッシュやが殺されたとき
$ cat my-data.txt | my-script.sh
私は仮定し、 とのコピーtee
のコピーはただちに終了する必要があります。ただし、シェル自体は終了しますが、tee
はありません。
他の誰かが問題を再現せるのに十分ではありません。特定の信号を「殺す」? 'my-binary 'が終了以外の方法でシグナルを処理することを選択した場合、シグナルをトラップすることができます。 –
( 'pipefail'は、* tee *が失敗したが、* my-binary *が成功して終了した場合に終了ステータスが失敗したことを確認しますが、失敗した' my-binary'の場合は 'pipefail'は何の効果もありません)。 –
... 'set -e'は、ほとんどの状況では[移植性の問題](https://www.in-ulm.de/~mascheck/various/set-e/)のソースでもありません。 )と[general nonintuitiveness](http://mywiki.wooledge.org/BashFAQ/105)(急いでいると練習を見て、アレゴリーをスキップします)。 –