You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:30:48