" DIE" bash的信号处理程序

时间:2013-02-08 21:05:55

标签: perl bash error-handling

在Perl中,如果程序退出并出现错误,您可以编写$SIG{__DIE__}处理程序来执行代码。 bash是否提供类似的功能?

这是我正在尝试做的事情:我有一个bash脚本,它创建一个新目录并调用几个命令,然后用数据文件填充新目录。我正在使用set -e,以便在任何命令失败时脚本立即终止。如果失败,我希望脚本删除它创建的目录。如果脚本成功完成,那么新输出当然应该保留。

bash是否提供DIE信号处理程序,或任何能够让我这样做的类似功能?

1 个答案:

答案 0 :(得分:5)

由于您使用的是set -e,因此您可以安装ERR处理程序:

trap errfunc ERR
如果任何命令以非零退出代码退出(并且因为您使用errfunc,则将调用

set -e。这将终止脚本。)

您也可以通过这种方式传递参数:

trap 'errfunc $LINENO' ERR

由于陷阱命令在错误点处为eval,因此该陷阱会将失败命令的行号传递给errfunc