我经常在 debian 和 Linux 中运行 bash 脚本。
我们都知道 CTRL + C 组合键可以中断当前程序并关闭可执行文件/脚本,但此击键完全终止批处理/脚本。
我正在寻找的是击键仅跳过(如嵌套的 CTRL +C)仅针对非常实际的段落即使不执行该段落会导致出现错误的情况,就像 for 循环中的“break”和“continue”所做的那样。
示例脚本:
演示文件
wget http://something_from_the_internet...
unzip that_file
ping my_host
4th passage...
5th passage...
我想按组合键跳到第 2 个命令(在本例中为解压缩),或者按两次并直接转到第 3 个命令(在本例中为 ping...)。
在许多情况下,脚本文件的结果是由所有段落给出的..但在我的情况下并非如此,出于测试目的,具有这样的组合将允许我运行和测试内容,而无需注释所有行顶部只是为了快速查看底部的最新信息。
答案1
答案2
您可以选择SIGINT
使用 Bash 的内置函数捕获信号trap
:
trap [COMMANDS] [SIGNALS]
例如,您可以捕获SIGINT
发送到前台脚本的信号,以将信号发送到从脚本派生的进程。
然而,在这种情况下,您将需要分叉进程的 PID。您可以使用 Bash 的$!
变量,但它仅适用于分叉到后台的进程。
作为解决方法,为了保持脚本的同步性质,您可以显式调用wait
返回的 PID。
#!/usr/bin/env bash
function skip() {
kill -SIGTERM $!
}
trap skip SIGINT
ping ... &
wait $!
wget ... &
wait $!
unzip ... &
wait $!