如果我们在脚本中应用了捕获,我们通常会在脚本的结尾处,将接收到信号时的行为处理重置为默认模式。重置(移除)捕获的语法如下所示:
从上述语法中可以看出,使用破折号作为 trap 语句的命令参数,就可以移除信号的捕获。
下面,我们以脚本 trap_reset.sh为例,来学习如何在脚本中移除先前定义的捕获。其脚本的内容类似如下所示:
#!/bin/bash
#定义函数cleanup
function cleanup {
#如果变量 msgfile 所指定的文件存在
if [[ -e $msgfile ]]; then
#将文件重命名(或移除)
mv $msgfile $msgfile.dead
fi
exit
}
#捕获INT和TERM信号
trap cleanup INT TERM
#创建一个临时文件
msgfile=`mktemp /tmp/testtrap.$$.XXXXXX`
#通过命令行向此临时文件中写入内容
cat > $msgfile
#接下来,发送临时文件的内容到指定的邮件地址,你自己完善此部分代码
#send the contents of $msgfile to the specified mail address...
#删除临时文件
rm $msgfile
#移除信号INT和TERM的捕获
trap - INT TERM
上述脚本中,在用户已经完成了发送邮件的操作之后,临时文件会被删除。这时,因为已经不再需要清理操作,我们可以重置信号的捕获到默认状态,所以我们在脚本的最后一行重置了 INT 和 TERM 信号的捕获。