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

时间:2014-04-01 18:16:23

标签: bash shell zsh

考虑以下shell函数:

f() {
    echo "function"
    trap 'echo trap; sleep 1' EXIT
}

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

~$ f
function
~$ exit
trap

在zsh上,这是结果:

~$ f
function
trap
~$ exit

这是zshbuiltins man page

中所述
  

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

我的问题:有没有办法设置EXIT陷阱,只在 bash和zsh中 shell退出上执行?

1 个答案:

答案 0 :(得分:5)

强烈无聊和无趣的回答:

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