簡體   English   中英

Bash 腳本不使用 `set -e` 捕獲錯誤狀態

[英]Bash script does not catch error status with `set -e`

有人可以解釋一下為什么下面的簡單腳本不會在錯誤狀態下終止嗎?

我希望false會返回錯誤狀態並導致腳本在我使用set -e時停止

set -e
false && true
echo $?
echo Done

輸出:

1
Done

這個

set -e
false
echo $?
echo Done

輸出為空

您的期望不正確,這也是不真正推薦set -e一個重要原因。 set -e在非零退出狀態下退出的規則有一長串例外(包括&& ),這正是因為並非所有非零退出狀態都表示錯誤,而只是一個否定的結果。 例如, grep具有非零退出狀態,僅表示未找到匹配項。

echo foo | grep bar && echo "Found bar"
echo foo | grep bar || echo "bar not found"

假設是,如果您出於任何原因( if||&&等)檢查命令的退出狀態,那么您預計失敗的可能性,如果確實如此,這不是錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM