如何在Bash脚本中仅终止当前执行的命令?
让Ctrl+C仅终止耗时命令而不中断脚本执行
默认情况下,按下Ctrl+C会向整个脚本的进程组发送SIGINT信号,导致整个脚本直接终止,而不是仅终止正在运行的sleep命令。要实现只终止sleep、脚本继续执行后续代码的效果,可以通过捕获SIGINT信号来处理。
修改后的脚本
#!/bin/bash echo "Before sleep" # 捕获SIGINT信号,收到时输出提示(可选),不终止脚本 trap 'echo -e "\n已中断sleep命令"' SIGINT # 执行耗时命令,收到SIGINT后会自行退出 sleep 180 # 恢复默认的SIGINT处理(若后续需要默认终止行为,可添加此步) trap - SIGINT echo "After sleep" exit 0
原理说明
trap 'echo -e "\n已中断sleep命令"' SIGINT:告诉脚本在收到Ctrl+C触发的SIGINT信号时,仅执行指定的提示输出,而不是默认的终止整个脚本。- 当按下
Ctrl+C时,正在运行的sleep进程会收到SIGINT信号并立即退出,脚本随后触发陷阱中的提示,继续执行后续的echo "After sleep"语句。 - 如果后续脚本需要恢复
Ctrl+C终止整个脚本的默认行为,添加trap - SIGINT即可重置信号处理规则。
内容的提问来源于stack exchange,提问作者Enrico R.
相关产品推荐
相关产品推荐

