터미널에서 다음 명령을 실행한다고 가정해 보겠습니다.
this-command-doesnt-exist-and-closes-with-code-127 | jq ''
실행하면 파이프의 첫 번째 명령에 대한 종료 코드를 알고 싶습니다 echo $?
. 나는 다음과 같이 stderr를 리디렉션하는 것을 고려했습니다.0
jq
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입니다. 이 옵션은 기본적으로 비활성화되어 있습니다.