我已經把運行代碼失敗
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