我可以为陷阱处理程序中的 shell 脚本分配不同的退出状态吗?
通过反复试验,我发现调用退出状态exit
是trap
可以改变的。正常命令,无论失败还是成功,都不会改变退出状态。
现在我想知道,我是否可以依赖这种行为,或者是一些实现怪癖?
我一直试图在这方面找到一些文档,但无济于事。
测试脚本:
#!/bin/bash
function handler {
# a successful command won't change script exit status
echo handler, status=$1
# badcommand won't change script exit status
#badcommand
# exit will change script exit status
#exit 23
}
trap 'handler $?' EXIT
#badcommand
用法:
./trap_test.sh; echo status_out=$?
是的,您可以依赖它,并且在 shell标准中记录了它:
(同样的事情
return
)当没有
exit
命令但exit
设置了陷阱时,应适用以下内容:EXIT
以及所有关于复合命令、顺序列表等的规则,对于陷阱的存在没有特别的例外。我没有看到手册页提到它,所以除了查看代码之外,实验似乎是弄清楚会发生什么的最好方法。
尽管 EXIT 陷阱不会总是改变退出状态,但这对我来说是有意义的:脚本可能希望通过退出时的陷阱进行一些清理,但不会让清理弄乱主脚本设置的退出状态。而且,正如您所说,陷阱可以
exit
再次运行以设置所需的值。例如,如果你有这个:
这
rm
可能会将退出状态重置为零,这似乎没有那么有用。