我有以下循环:
while inotifywait -qq --event close_write "$filebs" "$filevp"; do
do_something()
done
问题是,在某些时候,两个事件会相继触发,因此,虽然代码是
do_something()
第一个事件,但第二个事件却被触发。
现在,我可以处理这两个事件,并且可以只处理第二个事件。但我不喜欢只处理第一个事件。
我该如何处理它们?
我想我需要在缓冲区中打印事件,例如与
inotifywatch
,并从该缓冲区读取?
我可能是错的,但我认为这会在每个事件上运行,因为我认为在您的示例中,您在每个事件后都重新启动 inotifywait ? -m,--监视器 不是在收到单个事件后退出,而是无限期地执行。默认行为是在第一个事件发生后退出。
inotifywait -m -qq --format '%f' -e close_write "$filebs" "$filevp" | while read file
do
echo "$file"
done
当我在 Netbeans 上保存文件时,我使用触发单元测试的脚本,并在保存多个文件时遇到相同的问题。最重要的是,如果测试结果正常,那么我会将更改提交到 git ——这也意味着 .git 目录必须从监视器中排除。
我找到的解决方案是简单地删除 -m 并将 inotyfiwait 放入循环内。这样写入只处理一次。
while true ; do
inotifywait -qq --event close_write "$filebs" "$filevp"
do_something()
done