我可以trap
在 bash 脚本中设置,但不能在 bash 函数中设置。
例如source
下面的代码并运行f
,现在尝试Ctrl+ C,它没有被困!
如何trap
在bash函数中设置?
4 trap ctrl_c INT
5
6 ctrl_c () {
7 echo "** Trapped CTRL-C"
8 }
9
10
11 f () {
12 for i in `seq 1 100`; do
13 sleep 1
14 echo -n "."
15 done
16 }
答案1
这是因为它将 SIGINT 发送到前台进程而不是bash
(正在运行脚本)。如果您想这样做,请使该函数异步然后使用wait
(这将按预期行事并使用陷阱)。
答案2
专业提示:当- 、 - 、 -不起作用时,使用Ctrl-向前台进程发送 QUIT 。\CtrlCZD
在执行结束时清除陷阱trap - list of signals here
非生产系统上的乐趣:尝试为所有敏感信号设置陷阱(例如,不是 KILL)。 kill -l
(不是小写 L,不是数字 1 或管道 |)
答案3
我认为你应该使该功能成为全球性的
#!/bin/bash
trap ctrl_c INT
ctrl_c () {
echo "** Trapped CTRL-C"
}
for i in `seq 1 100`; do
sleep 1
echo -n "."
done