我下的印象是exit
將終止當前的bash腳本不管是什麼,並且有以下錯誤處理程序在我的腳本的頂部:
function err {
printf "\e[31m$1\e[0m\n" 1>&2
exit 1
}
它的工作像大多數情況下,魅力直到這條線:
item=$(myfunc $1)
通常情況下,該行正常工作,與MYFUNC的STDOUT倒入$item
,如預期。當myfunc
通過上面看到的err
函數引發錯誤時,會出現此問題。 $()
最終吞噬非零回報,並防止退出退出腳本本身。如果我理解正確,問題是$()
實際上產生了一個新的子shell(就像棄用的反引號一樣),但是我知道沒有其他方法將函數的輸出捕獲到bash中允許exit
工作的變量中。
我也嘗試過使用set -e
,並且沒有任何運氣。有人可以建議如何構建我的錯誤處理程序,以便在這些情況下退出腳本嗎?
'$()'最終吞噬了一切,因爲*命令替換*在* subshell *中佔有一席之地。什麼是關於subshell的bash規則? *子外殼中沒有任何操作可以影響父進程... *是的,您可以返回退出狀態('$?'),但您無法執行其他任何操作。 –