2011-05-30 84 views
2

我知道我可以使用$?查看上次執行的命令的退出代碼,但是如果我想確定是否拋出了我自己的「退出0」或「退出1」,該怎麼辦?你能訪問陷阱中退出命令的代碼嗎?

例如:

#!/bin/bash -e  
trap "{ echo Exit code $?; exit; }" EXIT  
exit 1 

如果我運行此腳本,它打印出「退出碼0」,然後用退出代碼退出1.我可以訪問陷阱的代碼,還是我只是去關於這個錯誤的方式?換句話說,我希望這個簡單的腳本能打印出「退出代碼1」。

回答

4

這是0,因爲$?在腳本,它是由於代入雙引號的開始,爲0

試試這個:

trap '{ echo Exit code $?; exit; }' EXIT 
+0

這是一個很好的答案。很簡單,但很容易忽略!謝謝。 – abc 2011-05-31 01:26:51

1

終止的任何進程都會設置$?,這意味着它會不斷被覆蓋。將$?保存爲一個單獨命名的var,它是唯一的,並在退出時回顯。

編輯

Exit Shell Script Based on Process Exit Code

+0

我不認爲這相當回答我所得到的。你會如何改變我的腳本來整合你的解決方案? – 2011-05-30 14:32:18

+0

@ Ben-Flynn更新回答,附SO鏈接的鏈接 – 2011-05-30 21:40:42

+0

我看了一下,如果我打電話給一些退出代碼失敗的命令,它會起作用。它沒有解決當我從腳本中自己調用「退出1」時發生的情況。正如我所提到的,儘管我稱之爲「出口1」,陷阱的$? show的0,而不是1。現在我決定編寫自己的失敗函數而不是調用exit,但是我仍然想知道是否有可能捕獲我自己的進程將要在陷阱中退出的退出狀態。 – 2011-05-30 21:50:35

相關問題