트랩이 포함된 쉘 스크립트가 있지만 트랩이 예상대로 작동하지 않는 것 같습니다. 아래 코드와 bash 버전은 다음과 같습니다.
GNU bash, 버전 4.2.46(2)-릴리스(x86_64-redhat-linux-gnu)
set -e
function exit_message(){
echo -e "\e[31m\nError occurred "
}
function login(){
false
}
trap exit_message ERR
login
내가 그렇게 하면 위의 함정이 작동합니다
function login(){
trap exit_message ERR
false
}
답변1
에서배쉬 매뉴얼:
셸 실행 환경의 모든 [...] 측면은 다음 예외를 제외하고 함수와 해당 호출자 간에 동일합니다. DEBUG 및 RETURN 트랩은 내장을
trace
사용하여 함수에 속성이 부여되거나 다음으로 옵션이 활성화되지 않는 한 상속되지 않습니다. 내장 (이 경우 모든 함수는 DEBUG 및 RETURN 트랩을 상속함) 및 쉘 옵션이 활성화되지 않으면 ERR 트랩은 상속되지 않습니다.declare
-o functrace
set
-o errtrace