在Perl中,如果程序退出并出现错误,您可以编写$SIG{__DIE__}
处理程序来执行代码。 bash是否提供类似的功能?
这是我正在尝试做的事情:我有一个bash脚本,它创建一个新目录并调用几个命令,然后用数据文件填充新目录。我正在使用set -e
,以便在任何命令失败时脚本立即终止。如果失败,我希望脚本删除它创建的目录。如果脚本成功完成,那么新输出当然应该保留。
bash是否提供DIE信号处理程序,或任何能够让我这样做的类似功能?
答案 0 :(得分:5)
由于您使用的是set -e
,因此您可以安装ERR
处理程序:
trap errfunc ERR
如果任何命令以非零退出代码退出(并且因为您使用errfunc
,则将调用 set -e
。这将终止脚本。)
您也可以通过这种方式传递参数:
trap 'errfunc $LINENO' ERR
由于陷阱命令在错误点处为eval
,因此该陷阱会将失败命令的行号传递给errfunc
。