![Bash에서 "set -e" 옵션을 사용하면 소스 스크립트에서 문제가 되는 즉시 종료가 발생합니다.](https://linux55.com/image/213515/Bash%EC%97%90%EC%84%9C%20%22set%20-e%22%20%EC%98%B5%EC%85%98%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%20%EC%86%8C%EC%8A%A4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EB%90%98%EB%8A%94%20%EC%A6%89%EC%8B%9C%20%EC%A2%85%EB%A3%8C%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
터미널에서 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
스크립트를 받을 때마다 트랩을 설정해야 한다는 점에 유의하세요.