2012-01-02 110 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