트랩을 2개 만들었어요
trap function1 DEBUG
trap pwd ERR
function function1 {
echo $BASH_COMMAND
}
잘못된 명령을 사용하면 a
출력은 ->입니다.
a
bash: a: command not found
a
/home/user/dir
그런 다음 두 번째로 DEBUG를 호출하여 실행하는데 pwd
$BASH_COMMAND가 여전히 a인 이유는 무엇입니까? 명령이 실행될 때 function1의 함수 호출이 이루어졌는지 알 수 있는 방법이 있습니까 trap ERR
?
편집하다
함정은 두 개다.
trap -- 'f' DEBUG
trap -- 's' ERR
function f
{
echo "inside function f command is $BASH_COMMAND"
}
function s
{
echo "inside function s command is $BASH_COMMAND"
}
잘못된 명령의 출력은 a
다음과 같습니다.
inside function f command is a
bash: a: command not found
inside function f command is a
inside function s command is echo "inside function s command is $BASH_COMMAND"
두 번째는 inside function f command is a
ERR 트랩에서 나와야 합니다.
답변1
bash
이에 대한 내용은 문서(귀하의 문서 참조)에서 찾을 수 있으며 man bash
여러 곳에 설명되어 있습니다 trap
.
BASH_COMMAND
현재 실행 중이거나 곧 실행될 명령입니다. 단, 쉘이 트랩의 결과로 명령을 실행하는 경우는 트랩 시 실행된 명령입니다.
그리고
및 트랩 [...]은 함수에 [...] 속성이 지정되지 않았거나 내장 함수 설정을 사용하여 쉘 옵션이 활성화되지 않은 한 상속되지 않습니다(이 경우 모든 함수는 상속
DEBUG
및 트랩됩니다).RETURN
trace
-o functrace
DEBUG
RETURN
명령을 약간 수정하면 trap
더 명확하게 볼 수 있습니다.
trap 'echo "##DEBUG## $BASH_COMMAND"' DEBUG
trap 'echo "##ERR## $PWD"' ERR
a
##DEBUG## a
-bash: a: command not found
##DEBUG## a
##ERR## /home/roaima
그리고
f() { printf "%s..." "We are in function f()"; sleep 1; printf " OK\n"; }
f
##DEBUG## f
We are in function f()... OK