首页 > 解决方案 > Inotifywait 在 while 循环中无法按预期工作

问题描述

我想在监视目录中运行修改选项的数量以及何时发生 3 个修改事件。我想运行一个命令。

我已经尝试了如下所示的代码,但是即使发生修改事件,计数变量也不会增加。

#!/bin/bash
count=0
while :
do
    { inotifywait -m -q -e modify /home/testDir& let count="$count + 1"; } || exit 1
    if [ "$count" -eq "3" ]; then
        #Do something
        count=-250
    fi
done

标签: linuxbashshellcommand-lineinotifywait

解决方案


您的脚本和inotify使用存在几个问题:

inotifywait -m -q -e modify: -m: monitor 不退出,所以它永远不会退出,也永远不会打印出任何东西 -q: 不会打印出任何东西 -e: 该modify事件不适用于目录,但适用于其中的文件

{ inotifywait -m -q -e modify /home/testDir& let count="$count + 1"; } || exit 1

inotifywait在后台启动,立即加1计数并继续

let count="$count + 1: 太陈旧了。改为使用count=$((count + 1))

固定版本:

#!/usr/bin/env sh

count=0
while :; do
  {
    inotifywait -qe 'modify' /home/lea/t/testDir || exit 1
  } >/dev/null 2>&1 
  count=$((count + 1))
  if [ "$count" -eq "3" ]; then
    echo 'Do something'
    count=-250
  fi
done

推荐阅读