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

如何检测vim是否运行或终端等待输入,避免后台bash脚本中断操作

解决方案

核心逻辑是先检测当前终端前台是否运行着vim、其他脚本等非shell程序,只有终端处于空闲等待输入状态时,才弹出休息提醒,避免打断正在进行的操作。

优化后完整脚本

#!/bin/bash
# nightFall
# 空闲检测间隔,单位:秒,可根据需求自行调整
CHECK_INTERVAL=60
# 获取当前脚本运行的终端路径
CURRENT_TTY=$(tty)
# 获取当前shell的进程组ID
SELF_PGID=$(ps -o pgid= -p $$ | tr -d ' ')

while true; do
    # 提取当前终端的前台进程组ID
    FG_PGID=$(ps -t "$CURRENT_TTY" -o stat,pgid | grep '^+' | awk '{print $2}')
    # 仅当前台进程组为当前shell(终端空闲等待输入)时弹出提醒
    if [ "$FG_PGID" -eq "$SELF_PGID" ]; then
        clear
        text=""
        echo "Night begins to fall... Now might be a good time to rest."
        while [[ "$text" != "rest" ]]; do
            read -p "" text
        done
        break
    fi
    # 前台有活跃程序,休眠后重新检测
    sleep $CHECK_INTERVAL
done

使用说明

  • 仍可沿用你之前的(. nightFall &)方式后台运行,不会再打断正在运行的vim、脚本等前台任务
  • 只有当你退回到shell提示符、终端处于等待输入的空闲状态时,才会自动弹出休息提醒
  • 可修改CHECK_INTERVAL变量调整检测频率,比如设为30即每30秒检测一次终端状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:09