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