Почему inotifywait перестает работать последовательно после проверки git файлов, которые он просматривает? - PullRequest
0 голосов
/ 29 января 2020

Я запускаю 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 отвечая на эти файлы? Есть ли способ для этого повторно просмотреть эти файлы?

1 Ответ

2 голосов
/ 29 января 2020

inotifywait --event create /path/to/*.json вообще не работает , потому что уже существующий файл не может иметь событие create, а /path/to/*.json заменяется списком уже существующих имен файлов на ваша оболочка до того, как inotifywait даже запустится; любой файл, который не существует, не будет включен, и когда 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

...