
터미널에서 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
스크립트를 받을 때마다 트랩을 설정해야 한다는 점에 유의하세요.