天天看點

linux腳本 trap,Linux Shell的信号trap功能細節

它有三種形式分别對應三種不同的信号回應方式.

第一種:

trap 'commands' signal-list       當腳本收到signal-list清單内列出的信号時,trap指令執行雙引号中的指令.

第二種:

trap signal-list

trap              不指定任何指令,接受信号的預設操作.預設操作是結束程序的運作.

第三種:

trap ' ' signal-list

trap          指令指定一個空指令串,允許忽視信号.

NOTE:trap 對同種signal隻能相應一種設定,如果在一個shell裡面設定多個trap,那麼它隻會響應最後一個信号設定。

如:

trap   ' echo “aaaaaaaaaaa”  '  INT

trap   ' echo “bbbbbbbbbbb”  '  INT

那麼它隻會響應最後一個信号設定。

如下X/Open規範裡面規定的能夠被捕獲的比較重要的一些信号(括号裡面的數字是傳統的信号編号)

trap指令常見的用途在于腳本程式中斷時完成清理工作,比如臨時檔案等.

linux腳本 trap,Linux Shell的信号trap功能細節

trap指令舉例

eg 1:

[[email protected] ~]# trap "echo aaaaaa" 2

[[email protected] ~]# ^Caaaaaa   ==》執行ctrl+c,捕獲到信号2,将執行列印

eg 2:    如果遇到INT中斷,即Ctrl+c,即删除該檔案

#!/bin/bash

trap 'rm -f /tmp/my_tmp_file_$$' INT

echo "creating file /tmp/my_tmp_file_$$"

date > /tmp/my_tmp_file_$$

echo "press interrupt (CTRL-C) to interrupt ......"

while [ -f /tmp/my_tmp_file_$$ ];

do

echo "File exists"

sleep 3

done

echo" we never get here"

exit 0