비활성화해야 합니다일부(모두는 아님) 트랩이 일시적으로 내 기능에 있다가 다시 활성화합니다. 하지만 이렇게 하면 예상치 못한 동작이 발생합니다(비록 트랩과 신호를 처음 접하는 사람임에도 불구하고).
function hello(){
cleanup(){
echo bye!!
}
trap cleanup RETURN EXIT INT
echo "hello!!"
echo "echo hello2!!" > file2
trap '' RETURN EXIT
source file2
sleep 10
trap cleanup RETURN EXIT <-- last line
}
내가 볼 것으로 예상되는 것은 다음과 같습니다.
hello!!
hello2!!
bye!!
글쎄, 그게 내가 얻은거야. 하지만 이제 (코드 조각에 지정된) 마지막 줄을 주석 처리할 때 INT 신호에 대한 트랩을 비활성화하지 않았고 다시 활성화할 필요도 없기 때문에 여전히 동일한 출력이 나올 것으로 예상합니다. 그러나 다음과 같은 결과가 나타납니다. 이것:
hello!!
hello2!!
^C
의미는INT 트랩도 비활성화되었습니다.. 하고 trap '' RETURN EXIT
있다더 많은 것들이 두 신호를 무시하는 대신? 첫 번째 경우도 예상대로 작동하고 모든 것에 대한 나의 이해가 잘못된 것 같습니다.
나는 그것을 사용하고 있습니다 GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
.