13 我可以trap在bash脚本中设置,但不能在bash函数中设置。 例如,source下面的代码run 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 } bash trap — 程 source 2 您可以将放在f代码的末尾,并从中删除空格f ()。 — GWF
7 这是因为它将SIGINT发送到前台的进程,而不是发送到bash(正在运行脚本的)进程。如果要执行此操作,请使该函数异步,然后使用wait(将按预期方式使用并使用陷阱)。 — 克里斯·唐纳 source 这样的作品。但是我发现,如果f在管道中echo 123 | f,那么它不是陷阱吗? — 郑 @Cheng使用一个子外壳程序(在这种情况下,不需要管道,只需使用heredoc / herestring)。(command | command) & — 克里斯·
1 普罗蒂普:发送与前台进程戒烟Ctrl- \当Ctrl- C,- Z,- D不工作。 在执行结束时清除陷阱 trap - list of signals here 在非生产系统上的乐趣:尝试为所有敏感信号设置陷阱(例如,非杀死)。 kill -l(不是小写字母L,不是数字1或竖线|) — 巴里·A source
0 我认为您应该将该功能设为全局 #!/bin/bash trap ctrl_c INT ctrl_c () { echo "** Trapped CTRL-C" } for i in `seq 1 100`; do sleep 1 echo -n "." done — harish.venkat source INT并且SIGINT是同义词-不会有任何区别。 — 克里斯·
f
代码的末尾,并从中删除空格f ()
。