bash的"DIE"信号处理程序

Dan*_*age 1 error-handling bash perl

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

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

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

nne*_*neo 5

自从您使用以来set -e,您可以安装一个ERR处理程序:

trap errfunc ERR
Run Code Online (Sandbox Code Playgroud)

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

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

trap 'errfunc $LINENO' ERR
Run Code Online (Sandbox Code Playgroud)

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

  • @chepner:实际上,它没有解决这个问题.陷阱执行时,trap命令为"eval".因此,编写`trap'errfunc $ LINENO'ERR`是获取失败命令的行号的完全有效的方法. (2认同)