trap命令可以对信号进行捕获,命令格式如下:
trap command singal
第二个参数是信号名称,第一个参数是遇到信号singal执行的命令。
删除信号捕获,命令格式
trap -- singal
[root@localhost shell]# cat test.sh
#!/bin/bash
trap "echo 'Sorry,Ctrl-C is trapped.'" SIGINT
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
trap -- SIGINT
echo "I just removed the trap"
count=1
while [ $count -le 5 ]
do
echo "Second Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
运行情况如下:
[root@localhost shell]# ./test.sh
Loop #1
Loop #2
Loop #3
Loop #4
^CSorry,Ctrl-C is trapped.
Loop #5
I just removed the trap
Second Loop #1
Second Loop #2
^C
在第一个循环中按ctrl+C会执行捕获的命令,由于信号是在捕获被移除前接收到的,那么脚本会按照原先trap命令中的设置进行处理。