我想在 bash 脚本的末尾执行一些命令,即使用户按下 CTRL+C 来取消它的执行。
我知道我可以从另一种编程语言(例如 Python)中运行 bash 脚本,这样我就可以使用“finally”(try-finally)块来执行一些代码。
但是知道 StackOverflow 是一个交流绝妙想法的中心,我想问是否有办法从我的 bash 脚本中做我想做的事情。
那么,想法?
编辑:
我想要的是杀死在我的 bash 中打开的每个进程,即 selenium 和 Xvfb 进程。
我尝试将其写入代码:
trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" EXIT
但这迫使我在脚本内部每次运行子进程时多次按“CTRL + C”,例如:
Testing nsi.bd.helpcenter ...^C: -- Total time: 0min 0seg
Testing nsi.bibliography ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibrary ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibraryinstaller ...^C: -- Total time: 0min 1seg
Testing nsi.digitallibraryskins ...^C: -- Total time: 0min 0seg
....#continues
将陷阱行的结尾从 EXIT 更改为 SIGINT ,如下所示:
trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" SIGINT
做同样的事情。
现在在第一个 CTRL+C 上退出什么?
因为我试图在字符串的最后添加一个“exit 1”,比如
trap "... ;exit 1"
它可以在第一个 CTRL+C 上退出,但没有杀死我想要的进程。
想法?