dan*_*ast 9 bash signals exit-code bash-trap
这是myscript.sh:
#!/bin/bash
function mytrap {
echo "Trapped!"
}
trap mytrap EXIT
exit 3
Run Code Online (Sandbox Code Playgroud)
当我运行它:
> ./myscript.sh
echo $?
3
Run Code Online (Sandbox Code Playgroud)
为什么脚本的退出代码与陷阱的退出代码相同而没有它?通常,函数隐式返回最后执行的命令的退出代码.在这种情况下:
mytrap能回归0mytrap是最后执行的函数,脚本应返回0为什么不是这样?我的想法错在哪里?
从下面的man bash页面看参考,
exit [n]导致shell退出,状态为n.如果省略n,则退出状态是最后执行的命令的状态.在shell终止之前执行EXIT上的陷阱.
你有脚本的调试版本来证明,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
Run Code Online (Sandbox Code Playgroud)
考虑与您在评论中提到的相同,trap函数返回错误代码,
function mytrap {
echo "Trapped!"
exit 1
}
Run Code Online (Sandbox Code Playgroud)
查看脚本的扩展版本,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
+ exit 1
Run Code Online (Sandbox Code Playgroud)
和
echo $?
1
Run Code Online (Sandbox Code Playgroud)
要捕获trap函数的退出代码,
function mytrap {
echo "$?"
echo "Trapped!"
}
Run Code Online (Sandbox Code Playgroud)