如何在zsh和bash中的函数内设置shell退出陷阱

Ulo*_*oPe 7 bash shell zsh

考虑以下shell函数:

f() {
    echo "function"
    trap 'echo trap; sleep 1' EXIT
}
Run Code Online (Sandbox Code Playgroud)

在bash下,这将打印以下内容:

~$ f
function
~$ exit
trap
Run Code Online (Sandbox Code Playgroud)

然而,在zsh上,这是结果:

~$ f
function
trap
~$ exit
Run Code Online (Sandbox Code Playgroud)

这是在zshbuiltins手册页中解释的:

如果sig为0或EXIT并且在函数体内执行了trap语句,则在函数完成后执行命令arg.

我的问题:是否有设置一个的方式EXIT陷阱,只有执行的外壳出口两个 bash和zsh的?

tha*_*guy 6

强制性的无聊和无趣的答案:

f() { 
  if [ "$ZSH_VERSION" ]
  then
    zshexit() { echo trap; sleep 1; }  # zsh specific
  else
    trap 'echo trap; sleep 1' EXIT     # POSIX
  fi
}
Run Code Online (Sandbox Code Playgroud)