目前inotifywait
正在观看 git 服务器文件夹。仅在修改特定文件时结束它发出。问题是,当将更改推送到 git 服务器时,inotifywait
会触发几次。我不知道为什么。
那么接下来我该怎么做:防止inotifywait
重复?
我在考虑算法:当第一次触发时-> 睡眠脚本,所以它不会扫描下一个更改 5 秒-> 恢复脚本。但这听起来很愚蠢......你能帮我实现这个吗?谢谢!!
目前inotifywait
正在观看 git 服务器文件夹。仅在修改特定文件时结束它发出。问题是,当将更改推送到 git 服务器时,inotifywait
会触发几次。我不知道为什么。
那么接下来我该怎么做:防止inotifywait
重复?
我在考虑算法:当第一次触发时-> 睡眠脚本,所以它不会扫描下一个更改 5 秒-> 恢复脚本。但这听起来很愚蠢......你能帮我实现这个吗?谢谢!!
正如我在您的另一个问题中提到的,您可以首先设置一个接收后挂钩,只要对 Git 服务器进行推送,它就会为您签出回购协议。
您不仅可以inotify
在监控结帐时更改的文件时测试您的功能,而且您甚至可以考虑根本不使用inotify
,并使用挂钩来触发您的通知。挂钩可以列出文件
,然后您可以仅针对某些文件触发通知。post-receive
这是我根据自己的需要解决它的方法。我正在监视一个路径,以便它会自动编译语法错误。我对 . 发出的重复事件感到困扰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/
。while 循环将syncheck
检测到这一点并自动编译语法错误。
这种重复事件抑制解决方案的关键思想是 Unix 的纪元秒数和 bash 字典。