Linux Inotifywait在while循环中无法按预期工作
我想在监控目录中运行number of modify选项,并在3 modify事件发生时运行。我想运行一个命令 我已经尝试了如下所示的代码,但是计数变量并没有增加,即使发生了修改事件Linux Inotifywait在while循环中无法按预期工作,linux,bash,shell,command-line,inotifywait,Linux,Bash,Shell,Command Line,Inotifywait,我想在监控目录中运行number of modify选项,并在3 modify事件发生时运行。我想运行一个命令 我已经尝试了如下所示的代码,但是计数变量并没有增加,即使发生了修改事件 #!/bin/bash count=0 while : do { inotifywait -m -q -e modify /home/testDir& let count="$count + 1"; } || exit 1 if [ "$count"
#!/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
问题在
let
语句中。您可以将其替换为:
let "count=count+1";
这也很有用您的脚本和
inotify
使用中存在一些问题:
inotifywait-m-q-e modify
:
-m
:在不退出的情况下进行监视,因此它永远不会退出,也永远不会打印任何内容
-q
:不会打印任何内容
-e
:修改事件不适用于目录,但适用于其中的文件
{inotifywait-m-q-e modify/home/testDir&let count=“$count+1”}| |退出1
将在后台启动inotifywait
,立即添加1进行计数并继续
let count=“$count+1
:非常过时。请改用count=$((count+1))
固定版本:
!/usr/bin/env sh
计数=0
当:;做
{
inotifywait-qe'modify'/home/lea/t/testDir | |退出1
}>/dev/null 2>&1
计数=$((计数+1))
如果[“$count”-等式“3”];则
回声“做点什么”
计数=-250
fi
完成
谢谢您的精彩回答,它可以正常工作。但是,我想在计数
等于3时终止特定进程。但是,当我使用kill命令终止进程时,它不会立即终止。您认为inotifywait
的速度不够快,无法在修改后立即终止进程吗
动作发生了。取决于达到3后要终止的进程。你的意思是打破while循环吗?如果是这样,只要使用If[“$count”-eq“3”];然后..根据足够快的速度(“立即”)打破@kkk001几乎从来都不安全。即使你现在让它工作起来,它也可能会随机失败,通常是当一些看似无关的事情发生变化时。标准术语是,它基本上被认为是一个bug,一个你真的应该以不同的方式做事的标志。