1

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

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

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

4

1 回答 1

5

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

trap errfunc ERR

errfunc如果任何命令以非零退出代码退出,将被调用(并且因为您正在使用set -e,这将终止脚本)。

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

trap 'errfunc $LINENO' ERR

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

于 2013-02-08T21:08:07.690 回答