파이프라인의 첫 번째 명령에 오류가 있는지 어떻게 확인할 수 있나요?

파이프라인의 첫 번째 명령에 오류가 있는지 어떻게 확인할 수 있나요?

터미널에서 다음 명령을 실행한다고 가정해 보겠습니다.

this-command-doesnt-exist-and-closes-with-code-127 | jq ''

실행하면 파이프의 첫 번째 명령에 대한 종료 코드를 알고 싶습니다 echo $?. 나는 다음과 같이 stderr를 리디렉션하는 것을 고려했습니다.0jq

this-command-doesnt-exist-and-closes-with-1 2>&1 | jq ''
if [ $? != 0 ]; then
    echo "I got an error"
fi

그렇게 의미없는 메시지를 보냈습니다 jq. 문제는 해결되지만 올바른 해결책은 아닌 것 같습니다. 파이프에서 명령의 오류 코드를 어떻게 얻을 수 있나요?

답변1

사용하는 경우 다음을 bash사용할 수 있습니다 set -o pipefail.

$ set -o pipefail
$ this-command-doesnt-exist-and-closes-with-code-127 | jq ''
bash: this-command-doesnt-exist-and-closes-with-code-127: command not found...
$ echo $?
127

~에서배쉬 매뉴얼 페이지:

파이프 고장

설정된 경우 파이프라인의 반환 값은 0이 아닌 상태로 종료된 마지막(가장 오른쪽) 명령의 값이거나, 파이프라인의 모든 명령이 성공적으로 종료된 경우 0입니다. 이 옵션은 기본적으로 비활성화되어 있습니다.

관련 정보