我看到的這兩個的SuSE 11.3和Mac OS之前,埃爾卡皮坦在bash版51年2月3日此行爲。在埃爾卡皮坦猛砸3.2.57有「正確」的行爲,即諸如bash 4.
然而,上面提出的解決辦法,增加「||退出$?」在子shell的關閉paren之後,無論使用什麼版本的bash,都會打敗-e標誌的意圖。從男子bash:
-e如果一個簡單的命令(見上面的SHELL GRAMMAR)退出 非零狀態立即退出。如果失敗的命令是命令列表的 部分緊跟一段時間,或直到關鍵字,在測試過程中 在if語句,一個& &或部分shell不會退出||列表,...
子shell後跟「|| exit $?」顯然算作命令清單;並且bash -e標誌不適用於子shell內的ANY命令。試試看:
$ set -e
$ (echo before the error; false; echo after the error, status $?;) || echo after the subshell, status $?
before the error
after the error, status 1
$
因爲子shell之後||,即運行,即使設定-e「的錯誤後回聲」。不僅如此,subshell退出0,因爲「回聲」跑了。那麼「|| exit $?」甚至不會運行「退出」。可能不是我們想要的!
所以,據我所知,他們是否兌現慶典-e子shell後,還是沒有下面的公式是使用bash版本兼容。它甚至能夠正常運作,如果-e標誌恰巧被重置:
添加以下行的每個子shell在bash腳本右括號後:
case $?/$- in (0/*) ;; (*/*e*) exit $? ;; esaC# honor bash -e flag when subshell returns
是否有機會在所有你可以更新你的bash版本,因爲這個確切的腳本按照4.1.5的預期工作。也許這是你的'FALSE'版本 – 2013-02-20 01:17:53