`source foo && true`가 bash에서 스크립트를 종료하는 이유는 무엇입니까?

`source foo && true`가 bash에서 스크립트를 종료하는 이유는 무엇입니까?

그래서 저는 이것을 읽었습니다: `set -e`를 사용하는 Bash 스크립트는 `... && ...` 명령에서 중지되지 않습니다.

이것은 의미가 있습니다. 이제 질문은 다음과 같습니다.

테스트 A:

$ cat ./test.sh 

set -ex
source foo && true
echo 'running'

$ ./test.sh 
++ source foo
./test.sh: line 16: foo: No such file or directory

$ echo $?
1

테스트 B:

$ cat ./test.sh 

set -ex
cat foo && true
echo 'running'

$ ./test.sh 
++ cat foo
cat: foo: No such file or directory
++ echo running
running

$ echo $?
0

source이 규칙을 위반한 유일한 이유는 무엇 입니까?용감한)?

실패한 명령이 while 또는 Until 키워드 바로 뒤의 명령 목록의 일부이거나 if 또는 elif 예약어 뒤의 테스트의 일부인 경우 쉘은 종료되지 않습니다.마지막 && 다음에 나오는 명령을 제외하고 && 또는 || 목록의 일부로 실행되는 모든 명령또는 ||, 마지막 명령을 제외한 파이프라인의 모든 명령 또는 !로 반전된 명령의 반환 값입니다.

답변1

source.는 소위 도트 명령이라고 하는 도트 명령 의 별칭입니다 special command. 여기서 POSIX는 이러한 명령을 오류 발생 시 전체 비대화형 셸을 종료하는 것으로 설명합니다.

다음을 통해 명령을 호출하는 경우:

bash test.sh

bash는 종료되지 않지만 호출할 때:

bash -o posix test.sh

종료됩니다. 따라서 bash는 기본적으로 POSIX 호환으로 컴파일되거나 실제로 bash와 다른 쉘을 호출하고 있습니다.

바라보다http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14표준으로.

관련 정보