这是myscript.sh
:
#!/bin/bash
function mytrap {
echo "Trapped!"
}
trap mytrap EXIT
exit 3
当我运行它时:
> ./myscript.sh
echo $?
3
为什么脚本的退出代码与陷阱的退出代码相同而没有它?通常,函数隐式返回最后执行的命令的退出代码。在这种情况下:
mytrap
返回0 mytrap
是最后执行的函数,因此脚本应返回0 为什么不是这样?我的想法在哪里错了?
答案 0 :(得分:8)
查看以下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!"
}