trap是乙個shell內建命令,用於指定在接收到訊號後將要採取的動作,常見的用途是在指令碼程式被中斷時完成清理工作。比如,按ctrl+c會使指令碼終止執行,實際上系統傳送了sigint訊號給指令碼程序,sigint訊號的預設處理方式就是退出程式。如果要在ctrl+c不退出程式,那麼就得使用trap命令來指定一下sigint的處理方式了。trap命令不僅僅處理linux訊號,還能對指令碼退出(exit)、除錯(debug)、錯誤(err)、返回(return)等情況指定處理方式。
trap命令的引數分為兩部分,前一部分是接收到指定訊號時將要採取的行動,後一部分是要處理的訊號名。
trap command signal
它有三種形式分別對應三種不同的訊號回應方式。
第一種:
trap "commands" signal-list
當指令碼收到signal-list清單內列出的訊號時,trap命令執行雙引號中的命令。
第二種:
trap signal-list
trap不指定任何命令,或者是 "-" ,接受訊號的預設操作,預設操作是結束程序的執行。
第三種:
trap " " signal-list
trap命令指定乙個空命令串,允許忽視訊號,我們用到的就是這一種。
如果要重置某個訊號的處理條件到其預設值,只需簡單的將command設定為-或者留空。如果要忽略某個訊號,就把command設定為空字串 ""。乙個不帶引數的trap命令將列出當前設定的訊號及其行動的清單。
※ 指令碼程式通常是以從上到下的順序解釋執行的,所以必須在你想保護的那部分**以前指定trap命令。
例:trap "echo no way" 1 2 3 9
指定了命令,如果遇到 hup int quit kill 訊號,則執行 echo no way 命令
trap -p
顯示當前trap設定
trap "" int quit
遇到 int 和 quit 訊號,則忽略,什麼也不做
trap 1 2 3 9
沒有指定命令部分,恢復 hup int quit kill 這些訊號設定;
more:
在shell中捕捉訊號的trap命令
1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap commands signal list trap co...
在SHELL中捕捉訊號的TRAP命令
一.trap捕捉到訊號之後,可以有三種反應方式 1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap comm...
shell 使用命令trap來捕捉訊號
一.trap捕捉到訊號之後,可以有三種反應方式 1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap comm...