트랩이 작동하지 않음

트랩이 작동하지 않음

트랩이 포함된 쉘 스크립트가 있지만 트랩이 예상대로 작동하지 않는 것 같습니다. 아래는 코드 및 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내장 함수를 사용하여 함수에 속성을 할당 declare하거나 -o functrace다음 명령을 사용하지 않는 한 상속되지 않습니다. -in 함수에는 이 옵션이 활성화되어 있으며(이 경우 모든 함수는 DEBUG 및 RETURN 트랩을 상속함) set쉘 옵션이 활성화되지 않으면 ERR 트랩이 상속되지 않습니다.-o errtrace

관련 정보