user_interrupt(){ echo -e "\n\nKeyboard Interrupt detected." sleep 2 echo -e "\n Cleaning up..." rm -rf /usr/local/src/mysources }
现在,在同一个脚本中,我有另一个名为install()
函数,它使用标准的./configure
make install
进程从源代码中一个接一个地安装一些程序包。 这个想法是在一个接一个地运行3个设备时捕获用户中断。 问题是,我在哪里放置以下陈述:
trap user_interrupt SIGINT trap user_interrupt SIGTSTP
那么我应该把它作为install()
函数中的第一条语句吗? 或者我需要一个if-else
条件?
我想你想在检测到用户中断后exit
(当然在清理完成后)。 如果是这样的话,你需要在函数中的rm -rf ...
行后面说exit
。 除非你这样做,否则trap
会捕获一个SIGINT
,例如在你的user_interrupt
函数中执行任务,脚本将继续执行。
要回答另外一个问题,只需在脚本的顶部定义你所提到的函数,接下来是两个trap
命令,然后是其余的代码( install()
函数等等)。 trap
会捕获提到的信号,你不需要任何明确的处理。