![파이프 전에 이전 명령에서 종료 코드 가져오기](https://linux55.com/image/114301/%ED%8C%8C%EC%9D%B4%ED%94%84%20%EC%A0%84%EC%97%90%20%EC%9D%B4%EC%A0%84%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EC%A2%85%EB%A3%8C%20%EC%BD%94%EB%93%9C%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.png)
나는 이것을 가지고있다:
node ${SUMAN_RUNNABLE} | tee -a run.sh.log
EXIT_CODE=$?;
하지만 tee가 노드 실행 파일 대신 코드를 제공하기 때문에 종료 코드는 항상 0인 것처럼 보입니다.
이 경우 노드 실행 파일에서 종료 코드를 캡처하는 방법이 있습니까?
답변1
~에서https://stackoverflow.com/a/1221870/5020949:
이름이 지정된 내부 Bash 변수가 있습니다
$PIPESTATUS
. 이는 마지막 포그라운드 명령 파이프라인에 있는 각 명령의 종료 상태를 보유하는 배열입니다.<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0
또는 다른 셸(예: zsh)에서도 작동하는 또 다른 대안은 파이프라인 실패를 활성화하는 것입니다.
set -o pipefail ...
첫 번째 옵션은아니요
zsh
구문이 약간 다르기 때문에 이것이 작동합니다.