트랩이 작동하지 않음

트랩이 작동하지 않음

트랩이 포함된 쉘 스크립트가 있지만 트랩이 예상대로 작동하지 않는 것 같습니다. 아래 코드와 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 functraceset-o errtrace

관련 정보