2016-01-22 79 views
6

可能只是一個簡單的問題,但卻是一個優雅的解決方案。我想運行一系列命令(每一個都是測試),如果其中任何一個返回非零,則返回1。通常我會這樣做:如果任何單個命令失敗,但仍然運行所有命令,則Bash會失敗

thingA && thingB && thingC 
exit $? 

但是,如果thingB失敗並且我想確保所有3都運行,那麼不會運行thingC。我可以輕易想到一個不雅的方法:

final_result=0 
retval=thingA 
if [[ $retval != 0 ]] then 
    final_result=1 
fi 
retval=thingB 
... 
exit $final_result 

有沒有一些簡單,優雅的方式來得到我想要的?

回答

10

這是否夠優雅?

status=0 
thingA || status=1 
thingB || status=1 
thingC || status=1 
exit $status 

可以使用$?而不是1如果你喜歡。或者,當您執行任務時,您可以通過使用狀態1,2,3來識別最後一個失敗的命令。如果你想知道第一個失敗的命令,你必須在分配給它之前測試$status

+0

這將工作,謝謝。 – Pace