找不到合適的標題,我不明白破折號/ bash中的行爲。也就是說,如果一個命令失敗,我使用set -e來救助,並且命令組來處理積極的結果。爲什麼不設置-e導致「false」失敗?假&&真'?
即。一般方案是:
[ ! wantcommand ] || command
比表示命令只在需要時纔會執行,並且失敗會自動終止腳本。
可能有一些必要的後處理,在這種情況下,我用這個:
[ ! wantcommand ] || { command && postprocess; }
這導致了一些奇怪的bughunting,因爲這不會殺殼,我不能讓背後的原因。我現在必須經歷一些shell代碼塊,但想了解原因。
來進行測試:
bash -c 'set -e; { false || false && echo "post" ; }; echo "ec $?"'
或:
bash -c 'set -e; { set -e; false || false && echo "post" ; }; echo "ec $?"'
注:我不要求修復,但主要爲什麼返回代碼爲1,但外殼不會退出
是的,在我看來,明確的錯誤處理方式沒有那麼混亂,看起來很醜,但至少容易理解。不能說我完全理解了這種行爲,這對我來說似乎非常不直觀。稍後將通讀鏈接,謝謝 我誤解的部分原因似乎來自make中的腳本,如果ec!= 0總是會失敗,無論如何 –