当脚本执行中途被打断,例如使用CTRL+C
时,我希望能够执行像rm -rf /etc/XXX.pid
这样的命令。请问有人可以告诉我应该怎么做吗?
当脚本执行中途被打断,例如使用CTRL+C
时,我希望能够执行像rm -rf /etc/XXX.pid
这样的命令。请问有人可以告诉我应该怎么做吗?
虽然这可能会让很多人感到震惊,但是您可以使用 bash
内置的 trap
来捕获信号 :-)
至少那些可以被捕获的信号,但是 CTRL-C 通常与 INT
信号绑定。您可以捕获这些信号并执行任意代码。
以下脚本将要求您输入一些文本,然后将其回显给您。如果偶然生成一个 INT
信号,它只会对您发出咆哮声并退出:
#!/bin/bash
exitfn () {
trap SIGINT # Restore signal handling for SIGINT
echo; echo 'Aarghh!!' # Growl at user,
exit # then exit script.
}
trap "exitfn" INT # Set up SIGINT trap to call function.
read -p "What? " # Ask user for input.
echo "You said: $REPLY"
trap SIGINT # Restore signal handling to previous before exit.
以下是测试运行记录(包括完整输入的一行、在输入任何内容之前按下CTRL-C的一行以及在按下CTRL-C之前部分输入的一行):
pax> ./testprog.sh
What? hello there
You said: hello there
pax> ./testprog.sh
What? ^C
Aarghh!!
pax> ./qq.sh
What? incomplete line being entere... ^C
Aarghh!!
trap
用于在脚本中捕获信号,包括按下 Ctrl-C 时产生的 SIGINT
信号。
^c
终止? - undefinedEXIT
上设置陷阱,以在shell退出时执行代码。 - undefinedtrap SIGINT
?如果我在某个地方忘记了它会发生什么? - undefinedsource
命令而不是在单独的进程中运行脚本,可能会出现问题。 - undefined