파이프 전에 이전 명령에서 종료 코드 가져오기

파이프 전에 이전 명령에서 종료 코드 가져오기

나는 이것을 가지고있다:

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구문이 약간 다르기 때문에 이것이 작동합니다.

관련 정보