2012-07-17 147 views
1

我正在爲bash腳本編寫單元測試,並希望檢查腳本是否因錯誤而退出(我使用了帶錯誤代碼的exit)。攔截出口

有沒有辦法趕上exit(我知道trap),但不要中斷命令流(類似異常捕捉)?

我的測試腳本:

do_smth1 && echo OK || echo Fail 
do_smth2 && echo OK || echo Fail 
do_smth3 && echo OK || echo Fail 

我的主要腳本:

do_smth1(){ 
    ... 
    ... 
    [ $? -eq 0 ] && success || error_exit 
} 

等。

我想要一個接一個地執行所有測試。現在在第一個命令之後流動中斷。

+0

爲什麼你不能只檢查返回值?你是否用'set -e'運行測試腳本,並且沒有正確處理被測腳本的返回值?也許你可以用一個例子來擴展你的問題,你有什麼(代碼)和你喜歡什麼功能。 – 2012-07-17 11:51:51

+0

請參閱編輯 – qutron 2012-07-17 12:00:50

+0

您所展示的內容應該適用。偶然有'set -e'有效嗎?如果將'set + e'放在測試腳本的開頭附近會發生什麼? – 2012-07-17 12:18:57

回答

1

你可以寫:

success=0 
error_code=1 
do_smth1(){   
    ...   
    ...   
    [ $? -eq 0 ] && return $success || return $error_code   
} 

do_smth1 && echo OK || echo Fail    
do_smth2 && echo OK || echo Fail    
do_smth3 && echo OK || echo Fail 

參考退出,回報手冊頁,知道什麼時候該用哪個。