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

Bash中用Trap与SIGINT实现5次Ctrl+C退出脚本的问题

解决Ctrl+C次数统计脚本的问题

原脚本存在几个关键问题,导致无法实现预期功能:

  • for i in 'seq 1 5';使用单引号包裹命令,seq不会被执行,循环仅迭代一次字符串seq 1 5,这是输出1的直接原因。
  • 未定义trap指定的ctrl_c处理函数,系统收到SIGINT信号后无对应执行逻辑。
  • 脚本执行完循环后直接退出,没有持续运行等待用户触发Ctrl+C。

以下是修正后的可行脚本:

#!/bin/bash

count=0

# 定义SIGINT信号的处理函数
ctrl_c() {
    ((count++))
    echo -e "\r已按下Ctrl+C $count 次"
    if [ $count -eq 5 ]; then
        echo -e "\n已达到5次,退出脚本"
        exit 0
    fi
}

# 绑定SIGINT信号到处理函数,只需设置一次
trap ctrl_c SIGINT

# 让脚本持续运行,等待用户触发信号
echo "开始统计Ctrl+C次数,按5次后退出..."
while true; do
    sleep 1
done

修正说明:

  • 新增ctrl_c函数,每次收到Ctrl+C时自动计数,判断次数达标后退出脚本。
  • trap只需初始化绑定一次,无需在循环内重复设置。
  • 用while true配合sleep 1让脚本持续运行,同时避免过度占用系统资源。

内容的提问来源于stack exchange,提问作者LRJuarez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:00