Bash에서 "set -e" 옵션을 사용하면 소스 스크립트에서 문제가 되는 즉시 종료가 발생합니다.

Bash에서 "set -e" 옵션을 사용하면 소스 스크립트에서 문제가 되는 즉시 종료가 발생합니다.

터미널에서 bash를 사용할 때는 일반적으로 소스 스크립트를 실행해야 합니다. 이 경우 기본 쉘이 종료되는 것을 방지하려면 "exit"가 아닌 "return"을 통해 스크립트를 종료해야 합니다.

일반 사용자로서 "exit" 대신 "return"을 적용하기 위해 -e 옵션을 어떻게든 수행할 수 있습니다.

인사

안톤 베셀

답변1

예, errexit쉘 옵션을 설정하면 set -e명령이 0이 아닌 종료 상태로 종료되는 경우(명령이 AND/OR 목록 등의 일부가 아닌 경우) 현재 쉘이 즉시 종료됩니다.

즉, "외부적으로" 첫 번째 오류가 발생하면 소스 스크립트의 실행이 중지되도록 할 수 없습니다 set -e.

그러나 bash쉘에서 발생하는 또 다른 일은( set -e트리거되어야 하는 경우) 모든 ERR트랩이 실행된다는 것입니다. 이를 통해 우리는 트랩을 설정하고 실행만 할 수 있습니다 return.

$ cat script
echo hello
false
echo bye
$ . ./script
hello
bye

우리는 위의 스크립트가 실행될 때 실행을 멈추기를 원합니다 false. 에 대한 트랩을 설정하여 이를 수행합니다 ERR. 트랩은 사용되기 전에 먼저 자체적으로 설정을 해제합니다 return. 트랩이 자체적으로 설정 해제되지 않으면 return함수나 소스 스크립트 내부에 있지 않고 실행을 시도한다는 쉘로부터 불만 사항을 받습니다. 이는 소스 스크립트의 0이 아닌 반환 상태로 인해 트랩이 두 번째로 활성화되기 때문입니다.

$ trap 'trap - ERR;return' ERR
$ . ./script
hello
$ echo "$?"
1

스크립트를 받을 때마다 트랩을 설정해야 한다는 점에 유의하세요.

관련 정보