2012-01-02 114 views
1

我已经把运行代码失败

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 

回答

1

你可以试试这个使用trap解决。例如:trap "ERROR=1" ERRtrap '[ "$ERROR" = "1" ] && on_error' EXIT,然后提供on_error功能。

2

你尝试:

trap ... ERR 

如果SIGSPEC是ERR,命令arg的执行,只要一个简单的命令具有非零退出状态,

2

似乎trap '...' ERR对未设置的变量不起作用。

您可以使用一个子shell,而不是两个独立的脚本文件:

#!/bin/sh -eu 

main() { 
    echo "$X" 
} 

on_failure() { 
    echo "Failure" 
} 

(main) || on_failure