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

Bash:启动impressive后无需等待退出,直接进入while循环下一次迭代

问题解决:自动监控文件夹并重启PDF幻灯片查看器Impressive

需求概述

  • 启动Impressive PDF幻灯片查看器,按页展示指定文件夹内所有PDF文件
  • 监控目标文件夹的文件变化(添加、删除等操作)
  • 检测到变化时重启查看器,加载更新后的文件夹内容
  • 持续保持监控状态

原脚本问题

原脚本运行时,首次启动Impressive后程序会持续占用进程,导致while循环卡在第一次迭代,必须手动终止Impressive,inotifywait才会继续监控。尝试用nohup后台启动Impressive时,出现内存瞬间占满、机器死机的问题。

原脚本代码:

#!/bin/bash

TESTPATH="/some/path/"

while true; do
    inotifywait -e create,delete,moved_from -r "$TESTPATH" && \
        echo "DEBUG: Event detected!" && pkill -f /usr/bin/impressive || true && impressive -a 10 -w "$TESTPATH*.pdf"
done

修正后的解决方案

改用inotifywait的持续监控模式,配合管道读取事件,同时将Impressive后台启动,避免阻塞循环执行。修正后的脚本:

#!/bin/bash

TESTPATH="/some/path/"

inotifywait -m "$TESTPATH" -e moved_to -e moved_from -e delete |
    while read -r directory action file; do
            {
                echo "DEBUG: Event detected!" && pkill -f /usr/bin/impressive || true && impressive -a 10 -w "$TESTPATH*.pdf" &
            }
    done

关键改进说明

  • 使用inotifywait -m(持续监控模式),无需重复启动监控进程,保持持续监听状态
  • 通过管道将监控事件传递给while循环,每次触发事件就执行重启逻辑
  • 在impressive命令后添加&,让程序后台运行,不会阻塞循环继续执行
  • 调整监控事件为moved_to、moved_from、delete,更精准覆盖文件增删的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:53:09