inotifywait:处理旧事件时触发新事件

问题描述 投票:0回答:2

我有以下循环:

while inotifywait -qq --event close_write "$filebs" "$filevp"; do
    do_something()
done

问题是,在某些时候,两个事件会相继触发,因此,虽然代码是

do_something()
第一个事件,但第二个事件却被触发。

现在,我可以处理这两个事件,并且可以只处理第二个事件。但我不喜欢只处理第一个事件。

我该如何处理它们?

我想我需要在缓冲区中打印事件,例如与

inotifywatch
,并从该缓冲区读取?

bash event-handling race-condition inotify inotifywait
2个回答
0
投票

我可能是错的,但我认为这会在每个事件上运行,因为我认为在您的示例中,您在每个事件后都重新启动 inotifywait ? -m,--监视器 不是在收到单个事件后退出,而是无限期地执行。默认行为是在第一个事件发生后退出。

inotifywait -m -qq --format '%f' -e close_write "$filebs" "$filevp" | while read file
do


 echo "$file"
done

0
投票

当我在 Netbeans 上保存文件时,我使用触发单元测试的脚本,并在保存多个文件时遇到相同的问题。最重要的是,如果测试结果正常,那么我会将更改提交到 git ——这也意味着 .git 目录必须从监视器中排除。

我找到的解决方案是简单地删除 -m 并将 inotyfiwait 放入循环内。这样写入只处理一次。

while true  ; do
    inotifywait -qq --event close_write "$filebs" "$filevp"
    do_something()
done
© www.soinside.com 2019 - 2024. All rights reserved.