为公司书写过一个灵活的svn switch脚本(有一个build.prop文件来配置common customtags flextag的版本 )。我书写shell脚本有个习惯,喜欢在处理过程中生成中间文件。在程序运行结束时删除掉它们!但这样有个缺点,如果人为的终止(ctrl+c或kill)脚本。则会看到中间文件。感觉此脚本不整洁!老想着在脚本中加入一个捕获信号的语句以处理掉中间生成的文件。
下面是一个简单的例子:
[xliu@qht124 ~]$ cat trap.sh
#!/bin/sh
trap 'rm -f ~/d.java &&echo "D.java has been deleted"' INT
touch ~/d.java
sleep 180
[xliu@qht124 ~]$
|
1:脚本正常运行过程如下:
[xliu@qht124 ~]$ ./trap.sh
##在等待(因为有sleep 180)
[xliu@qht124 ~]$ ls #此为trap.sh运行完的显示
d.java trap.sh
2:脚本运行过程中被我ctrl+c终止:
[xliu@qht124 ~]$ ./trap.sh
D.java has been deleted
[xliu@qht124 ~]$ ls
trap.sh
[xliu@qht124 ~]$
|
3:忽略INT变量
sleep.sh内容如下:
trap '' INT 将ctrl+c对应的INT变量取消!这时运行./sleep.sh后,会一直sleep 120 秒,按下ctrl+c不起作用!
4:恢复INT信号量
这时运行./sleep.sh后,按下ctrl+c后,立即将该进程终止!
5:特别注意STOP和KILL两个信号量无法用trap捕捉,也无法忽略!
留为笔记!
阅读(1303) | 评论(0) | 转发(0) |