这是myscript.sh
:
#!/bin/bash function mytrap { echo "Trapped!" } trap mytrap EXIT exit 3
当我运行它:
> ./myscript.sh echo $? 3
为什么脚本的退出代码与陷阱的退出代码相同而没有它?通常,函数隐式返回最后执行的命令的退出代码.在这种情况下:
echo返回0
我希望mytrap
能回归0
由于mytrap
是最后执行的函数,脚本应返回0
为什么不是这样?我的想法错在哪里?
从下面的man bash
页面看参考,
exit [n]导致shell退出,状态为n.如果省略n,则退出状态是最后执行的命令的状态.在shell终止之前执行EXIT上的陷阱.
你有脚本的调试版本来证明,
+ 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!" }