나는 다음과 같은 스크립트가 :바이너리가 죽으면 "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
은 그렇지 않습니다.
:
tee
를 죽이는 즉시 및 당신이 bash는 4.4 이상을 실행하고, 중요한 경우, 내가 대신 다음 구현을 제안한다. 특정 신호가있는 "Kill it"? my-binary가 종료가 아닌 다른 방식으로 신호를 처리하도록 선택하면 신호가 트랩 될 수 있습니다. –
(BTW,'pipefail'는 * tee *가 실패했지만 * my-binary *가 성공으로 끝나면 종료 상태가 실패했음을 확인합니다. 그러나 실패한 'my-binary'일 경우'pipefail'은 아무런 효과가 없습니다). –
... 대부분의 상황에서 [이식성 문제] (https://www.in-ulm.de/~mascheck/various/set-e/)의 출처이기는하지만'set -e'는 관련이 없습니다.) 및 [general nonintuitiveness] (http://mywiki.wooledge.org/BashFAQ/105) (서두르면 우화를 건너 뛰고 연습 문제를 참조하십시오). –