为什么 inotifywait 在对其正在监视的文件进行 git 检出后停止持续工作?

Why does inotifywait stop working consistently after a git checkout on the files it's watching?

我正在 运行宁 inotifywait 文件目录:

inotifywait --quiet --monitor  \
  --event modify \
  --event moved_to \
  --event moved_from \
  --event move \
  --event unmount \
  --event create \
  --format '%w' /path/to/*.json | \
while read FILE; do
  echo "$FILE was changed."
done

在我 运行 git checkout [some existing branch name] 之前,这一直很好用。之后,inotifywait 停止响应检出分支时 git 更新的文件(即停止响应两个分支之间不同的文件)。

为什么 inotifywait 停止响应这些文件?有没有办法让它重新查看这些文件?

inotifywait --event create /path/to/*.json 根本 不起作用,因为已经存在的文件不能有 create 事件,并且 /path/to/*.jsoninotifywait 开始之前被 shell 替换为已经存在的文件名列表;任何不存在的文件都不会被包括在内,当 inotifywait open()s 现有文件时,它只会获得先前存在的副本,因此甚至看不到任何新创建的文件以后同名

改为关注目录:

inotifywait --quiet --monitor  \
  --event modify \
  --event moved_to \
  --event moved_from \
  --event move \
  --event unmount \
  --event create \
  --format '%w' /path/to | \
while IFS= read -r file; do
  [[ $file = *.json ]] || continue  # ignore any non-*.json files
  echo "$file was changed."
done