2014-04-04 13 views
4

我想我可以這樣寫我自己作爲內置的Bash總是會失敗,並顯示特定的錯誤代碼?

unrollme-dev-dan:~ Dan$ echo 'exit [email protected]' > fail 
unrollme-dev-dan:~ Dan$ chmod +x fail 
unrollme-dev-dan:~ Dan$ ./fail 42 
unrollme-dev-dan:~ Dan$ echo $? 
42 

是否有一個內置的,做這個? exit當然不會起作用,因爲它會退出當前進程,不會創建子進程並退出該進程。 test是我發現簡單獲取01作爲返回碼的最簡單方法。

http://httpstat.us/類似,我需要單元測試特定的錯誤代碼。這對谷歌來說非常困難,因爲大多數結果都是爲了處理錯誤,而不是造成錯誤。

回答

4

您可以輕鬆地從中創建子進程並在退出時返回代碼:

(exit 42) 
+0

好,我一直在想什麼,做括號,除了亂了我的裏grep我忘了報價。 – djechlin

+0

圓括號創建一個子shell,它實際上是一個子進程(除了'ksh'中的一些奇怪異常外)。這是一個新的過程,可以保護您不受各種方式影響父進程的影響,但對於此用例而言,它僅比函數稍微貴一些。 – kojiro

2

在POSIX中似乎沒有任何內置的東西。如果有一個非標準的工具,我不知道這件事,但你可以編寫一個簡單的外殼功能,如

fail() { 
    return $(($1)) 
} 

針對非數字值的算術表達式警衛。你可以寫

a=6 
fail a 

,你會得到的6退出狀態如果你只是寫return $1你會從外殼得到一個錯誤。

相關問題