Bash 파이프라인의 종료 상태는 스크립트마다 다릅니다.

Bash 파이프라인의 종료 상태는 스크립트마다 다릅니다.

다음 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

관련 정보