我已经把
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
答案 0 :(得分:2)
你有没有尝试过:
trap ... ERR
如果sigspec是ERR,只要简单命令具有非零退出状态,就会执行命令arg,
答案 1 :(得分:2)
似乎trap '...' ERR
不适用于未设置的变量。
您可以使用子shell而不是两个单独的脚本文件:
#!/bin/sh -eu
main() {
echo "$X"
}
on_failure() {
echo "Failure"
}
(main) || on_failure
答案 2 :(得分:1)
您可以尝试使用trap解决此问题。例如:trap "ERROR=1" ERR
和trap '[ "$ERROR" = "1" ] && on_error' EXIT
,然后提供on_error
功能。