trap
trap command signal # signal = HUP / INT / QUIT / ABRT / ALARM / TERM / ...
trap '命令' 信号列表 # 捕获信号时执行指定命令
trap 信号 # 恢复该信号的默认处理
trap '' 信号 # 忽略该信号(注意是两个单引号,中间无空格)
trap -p # 查看当前已设置的 trap
#!/bin/sh
trap 'rm -f /tmp/my_tmp_file_$$ ' INT # 设置:收到中断 INT 后,删除临时文件,
# $$ 处会被自动填充当前脚本的 PID
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 1 # 阻塞 1秒
done
echo The file no longer exists # INT删除临时文件后,循环结束,打印提示
trap INT # 复原 INT 信号回到默认功能(不再是删除临时文件)
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "press interrupt (control -C) to interrupt ..."
while [ -f /tmp/my_tmp_file_$$ ]; do
echo File exists
sleep 1
done
echo we never get here # 这句不会出现了,因为INT不会删除临时文件
exit 0