失败时运行代码

时间:2012-01-02 00:32:59

标签: bash unix sh

我已经把

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

3 个答案:

答案 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" ERRtrap '[ "$ERROR" = "1" ] && on_error' EXIT,然后提供on_error功能。