2010-01-08 79 views
3

我正在處理一個shell腳本,並且想要處理我可能遇到的各種退出代碼。要嘗試的東西出來,我使用這個腳本:陷印殼退出代碼

#!/bin/sh 
echo "Starting" 
trap "echo \"first one\"; echo \"second one\"; " 1 
exit 1; 

我想我失去了一些東西,但似乎我不能捕獲我自己的「退出1」。如果我試圖陷阱0一切正常:

#!/bin/sh 
echo "Starting" 
trap "echo \"first one\"; echo \"second one\"; " 0 
exit 

有什麼我應該知道的陷阱HUP(1)退出代碼?

回答

5

trap調度進程接收的信號(例如,來自kill),而不是退出代碼,其中陷阱... 0被保留用於進程結束。 trap /blah/blah 0將派上要麼exit 0exit 1

0

您還可以使用||運算符,用||表示b,b在失敗時執行

#!/bin/sh 

failed 
{ 
    echo "Failed $*" 
    exit 1 
} 

dosomething arg1 || failed "some comments" 
2

這只是一個退出代碼,並不代表HUP。所以你的trap ... 1正在尋找HUP,但出口只是一個出口。

除了系統信號,您可以通過執行trap -l進行列表,您可以使用一些特殊的Bash sigspecs:ERR,EXIT,RETURN和DEBUG。在所有情況下,您都應該使用信號的名稱而不是數字來提高可讀性。