2013-11-25 19 views

回答

2

如果您設置一個shell認領你能提供-e參數,使上內命令失敗腳本突破:

#!/bin/sh -e 
date; 
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl 
date; 
+1

這是真的很酷。謝謝 –

+2

@DavidMichaelGang請注意,它將退出* any *非零退出代碼的腳本。通常它是好的和可取的,但有時它會咬你...... – hyde

4

腳本的退出狀態(0表示成功,其他一切都失敗)是最後一個命令的退出狀態。爲了解決這個問題,在做其他事情之前將正確的退出狀態存儲在shell變量中例如:

#!/bin/sh 
date 
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl 
perlexitstatus=$? 
date 
exit $perlexitstatus 

爲了完整起見,其他兩種方式:

#!/bin/sh 
set -e # exit on non-zero command exitcode 
date 
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl 
date 

以上是經常有點不方便,因爲經常shell腳本有你不在乎的命令,也不要希望腳本失敗。

#!/bin/sh 
set -e # exit on non-zero command exitcode 
date 
perl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.pl || 
    { echo "aaaa... Script failed, spam [email protected]"; exit 1;} 
date 

最後一個可以用編寫的if-then-Fi無線聲明過,如果首選。它提供了一種打印自定義錯誤消息的方法,以防失敗命令的消息不清楚。

相關問題