У меня есть небольшой скрипт, который следит за изменениями в файлах, используя inotifywait
а>. Когда что-то меняется, пакет файлов отправляется через процесс (компилируется, сжимается, реорганизуется и т. д.), выполнение которого занимает около десяти секунд.
Рассмотрим следующий пример:
touch oli-test
inotifywait -mq oli-test | while read EV; do sleep 5; echo "$EV"; done
Если вы запустите touch oli-test
в другом терминале несколько раз, вы увидите, что каждый цикл завершается, прежде чем двигаться дальше. Этот сценарий очень реален для меня. Если я забуду сохранить файл, пока он уже обрабатывается, или замечу ошибку, события складываются, и я жду несколько минут.
Меня поражает, что есть две техники, которые объективно сделают этот рабочий процесс лучше. Я не уверен, что проще или лучше, поэтому я представляю оба:
Прервать предыдущие прогоны и немедленно перезапустить. Скриптовый процесс в настоящее время представляет собой просто встроенный набор команд. Я мог бы разбить их на функции Bash, я не горю желанием разбивать их дальше.
Отменить дребезг списка вещей, ожидающих обработки, чтобы, если пять событий произошли одновременно (или когда он уже обрабатывается), он запускался только один раз.
(Или оба... потому что я уверен, что есть случаи, когда оба были бы полезны)
Я также открыт для подходов, которые отличаются от inotifywait
, но они должны дать мне тот же результат и работать над Ubuntu.