트랩에서 종료를 호출한 후 ZSH가 함수 실행을 종료하는 이유는 무엇입니까?

트랩에서 종료를 호출한 후 ZSH가 함수 실행을 종료하는 이유는 무엇입니까?

다음 스크립트를 고려해보세요.

trap "echo TRAPPEDTERM >&2; exit" TERM

termself () {
    kill -TERM $$
    echo "Survived TERM!"
}
termself
echo "Bye."

BASH로 실행하면 인쇄됩니다 TRAPPEDTERM. ZSH에서는 termself함수가 완료되고 인쇄되지만 Survived TERM!반환되지 않습니다. echo "Bye." 그러면 ZSH에서 BASH의 동작을 어떻게 얻을 수 있습니까? 현재 사용하고 있는데 eval $functions[termself]부자연스럽네요.

$ bash -x ./termself.sh 
+ trap 'echo TRAPPEDTERM >&2; exit' TERM
+ termself
+ kill -TERM 293517
++ echo TRAPPEDTERM
TRAPPEDTERM
++ exit

$ zsh --no-rcs -x ./termself.sh 
+./termself.sh:3> trap 'echo TRAPPEDTERM >&2; exit' TERM
+./termself.sh:9> termself
+termself:1> kill -TERM 293525
+termself:1> echo TRAPPEDTERM
TRAPPEDTERM
+termself:1> exit
+termself:2> echo 'Survived TERM!'
Survived TERM!

$ bash --version ; zsh --version
GNU bash, version 5.0.18(1)-release (x86_64-pc-linux-gnu)
zsh 5.8 (x86_64-pc-linux-gnu)

답변1

이것은 zsh의 버그입니다.2019년에 이미 보고됨그리고 인용된알려진 버그 목록( Etc/BUGS소스코드 배포 중).

관련 오류( zsh -c 'trap "exit 1; echo x" EXIT; f() { exit; echo f; }; f'출력은 x주석에 언급된 대로 표시됨)는 다음과 같습니다.2021년 신고 시 수정됨, 하지만 그 항목은 아직 존재합니다.

관련 정보