我是myscript.sh
#!/bin/bash
function mytrap {
echo "Trapped!"
}
trap mytrap EXIT
exit 3当我运行它时:
> ./myscript.sh
echo $?
3为什么脚本的退出代码--带陷阱的退出代码--与没有它相同?通常,函数会隐式返回执行的最后一个命令的退出代码。在这种情况下:
mytrap返回0mytrap是执行的最后一个函数,所以脚本应该返回0为何不是这样呢?我哪里想错了?
发布于 2017-01-12 17:47:03
查看下面man bash页面中的参考资料,
退出n使shell退出状态为n。如果省略n,则退出状态是最后执行的命令的退出状态。在退出上的一个陷阱在终止之前执行。
脚本的调试版本可以证明,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!考虑与您在注释中提到的相同,返回错误代码的trap函数,
function mytrap {
echo "Trapped!"
exit 1
}看看脚本的扩展版本,
+ trap mytrap EXIT
+ exit 3
+ mytrap
+ echo 'Trapped!'
Trapped!
+ exit 1和
echo $?
1要捕获trap函数上的退出代码,
function mytrap {
echo "$?"
echo "Trapped!"
}https://stackoverflow.com/questions/41619629
复制相似问题