Сделайте что-нибудь, когда файл будет изменен

10

Когда я пишу документ LaTeX, я обнаруживаю, что нажимаю F6 в моем редакторе, чтобы часто компилировать. Или когда я использую SASS, я часто печатаю, makeчтобы конвертировать .scssв .css.

Теперь я бы хотел, чтобы машина выполняла грязную работу и работала makeили что-то еще каждый раз при изменении файла.

До сих пор я держал окно терминала открытым, нажимал стрелку вверх и возвращался. Или я использовал watch make, но это кажется странным решением.

Есть ли в Linux хороший способ что-то сделать при изменении данного файла?

Мартин Уединг
источник

Ответы:

4

Вы ищете inotifywait, часть инструментов inotify . Есть несколько примеров того, как использовать его на сайте проекта, но простой подход

while true; do inotifywait code.cpp -e modify; make; done

ключевой частью которого является,

inotifywait code.cpp -e modify

Эта команда будет ждать, пока не code.cppбудет изменена, а затем выйти. Вставьте бесконечный цикл и следите за makeтем, чтобы он постоянно перестраивался после каждой модификации.

Помимо ожидания изменения, вы можете подождать создания, удаления, доступа, открытия, закрытия и многого другого. Я настоятельно рекомендую просмотреть примеры проектов и страницу руководства inotifywait, чтобы найти другие идеи о том, как их можно использовать.

lostriebo
источник
Это именно то, что я ищу!
Мартин Уединг
1

Взгляните на incron , cron-подобный пакет, который реагирует на события файловой системы, а не на события времени. Пакет состоит из daemon ( incrond) и таблицы манипуляторов ( incrontab), аналогично известной crond/ crontabcron-паре.

С incron вы можете легко организовать запуск makeпри изменении определенных файлов и / или каталогов.

Стивен Понедельник
источник
Это кажется немного излишним с одной стороны, но с другой стороны, это просто правильный инструмент. Мне придется проверить это, может быть, я могу включить и отключить это для каждого сеанса программирования.
Мартин Уединг,
0

Вместо того watch make, как насчет watch ls? Тогда как раз, makeкогда отметка времени изменится.

Скотт К Уилсон
источник
Хорошо, make уже проверяет временные метки, поэтому проверять время бессмысленно, а затем снова проверять время.
Мартин Уединг
Правильно, но запуск make обходится дороже, чем запуск ls.
Скотт С. Уилсон
1
А если мой make-файл состоит из двух строк для этого сингла .tex? Как вы думаете, стоило бы написать lsпарсер?
Мартин Уединг,