抑制或阻止重复的inotifywait事件?

时间:2017-07-23 13:41:34

标签: linux git inotify inotifywait

目前inotifywait正在观看git服务器文件夹。结束它仅在特定文件修改时发出。问题是,当更改被推送到git服务器时,inotifywait会触发几次。我不知道为什么。

那么我该如何做呢:阻止inotifywait制作副本?

我正在考虑算法:当第一次触发时 - >睡眠脚本,因此它不会扫描下一次更改5秒 - >恢复脚本。但这听起来很愚蠢......你能帮助我实现这个目标吗?谢谢!

2 个答案:

答案 0 :(得分:1)

正如我在other question中提到的,你可以先设置一个post-receive挂钩,只要有对Git服务器进行推送就会为你检查回购。

在结帐时监控这些文件时,您不仅可以测试inotify功能,还可以根据inotify使用而不是,并使用钩子触发通知。
一个post-receive hook can list files,然后您只能针对某些文件触发通知。

答案 1 :(得分:0)

这是我为自己的需要解决的方法。我正在监视路径,以便它将自动编译语法错误。 inotifywait发出的重复事件让我感到困扰。将syncheck函数添加到您的.bashrc中:

syncheck() {
  declare -A fileMap
  inotifywait --exclude .swp --format '%w%f' -e modify,create -m -r -q $* | \
  while read FILE; do
    es=$(date +'%s')
    case "$FILE" in
    *.hs)
    if [[ ${fileMap[$FILE]} != $es ]];then
        sdiff=$((es-${fileMap[$FILE]:-0}))
        fileMap[$FILE]=$es
        ((sdiff < 3)) && continue
        ghc -fno-code $FILE
        echo "---------------------------------------------"
    fi
    ;;
    esac
  done
}

使用方法:

cd ~/src/proj/
. ~/.bashrc
syncheck .

在另一个终端中,在Haskell位置修改或创建一个~/src/proj/文件。 syncheck while循环将检测到此错误并自动编译以查找语法错误。

此重复事件抑制解决方案的关键思想是Unix的纪元秒和bash字典。