다음 bash 파이프라인은 1을 반환합니다.
$ false | true
$ echo $?
1
그러나 스크립트에서 실행되면 0이 반환됩니다.
$ cat test.sh
#!/usr/bin/env bash
false | true
echo $?
$ bash test.sh
0
누군가 이유를 설명할 수 있나요?
답변1
Bash의 표준 동작은 스크립트에 표시된 대로 파이프라인의 마지막 명령의 종료 상태를 반환하는 것입니다. 활성화한 것 같습니다.파이프 고장대화형 셸의 옵션은 마지막 명령이 0이 아닌 종료 상태로 반환되도록 강제합니다. 작동 방식은 다음과 같습니다.
$ set -o pipefail # enable pipefail
$ false | true
$ echo $?
1
$ set +o pipefail # disable pipefail
$ false | true
$ echo $?
0