考虑以下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的?
强制性的无聊和无趣的答案:
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)
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |