我已经把运行代码失败
set -e
set -u
在我的bash脚本的顶部,以使其失败,而不是回事。
有没有办法让我指定一些代码在失败时运行?
如果没有更好的办法,我可以让我的程序a
三个文件:
a
.a
.a_onfail
,并有a
只是
# headers etc
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
$(DIR)/.a || $(DIR)/.a_onfail
我已经把运行代码失败
set -e
set -u
在我的bash脚本的顶部,以使其失败,而不是回事。
有没有办法让我指定一些代码在失败时运行?
如果没有更好的办法,我可以让我的程序a
三个文件:
a
.a
.a_onfail
,并有a
只是
# headers etc
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
$(DIR)/.a || $(DIR)/.a_onfail
你可以试试这个使用trap解决。例如:trap "ERROR=1" ERR
和trap '[ "$ERROR" = "1" ] && on_error' EXIT
,然后提供on_error
功能。
你尝试:
trap ... ERR
如果SIGSPEC是ERR,命令arg的执行,只要一个简单的命令具有非零退出状态,
似乎trap '...' ERR
对未设置的变量不起作用。
您可以使用一个子shell,而不是两个独立的脚本文件:
#!/bin/sh -eu
main() {
echo "$X"
}
on_failure() {
echo "Failure"
}
(main) || on_failure