Автоматически запускать команду каждый раз при изменении файла

Автоматически запускать команду каждый раз при изменении файла

Каждый раз, когда я вношу изменения в файл и сохраняю его, я хочу, чтобы запускалась команда. Я могу настроить скрипт Ruby, который будет отслеживать файл и запускать команду по моему желанию, но мне приходит в голову мысль, что должен быть какой-то простой способ Unix сделать это. Есть ли он? Я использую Ubuntu 8.10, чтобы быть немного менее расплывчатым.

Редактировать:

incronбыло предложено, и выглядит хорошо. Но у меня возникли проблемы с его работой (редактирование: команда, похоже, не запускается, когда я сохраняю файл в указанном каталоге, или моя команда неисправна). Я установил incron и настроил таблицу incron моего пользователя с помощью incrontab, а также добавил пользователя в список разрешенных. Моя конкретная ситуация — редактирование файла TeX. Я хочу, чтобы команда отображала его как PDF и запускалась каждый раз, когда я редактирую и сохраняю файл TeX. Итак, вот запись в таблице incron, которую я придумал:

/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex

Что я делаю не так?

решение1

Вы не указали, какой Unix вы используете, но Linux имеетinotifyи здесьinotify-инструментыиинкрон.

EстьИнтерфейс Рубиуведомлять.

решение2

Напрямую нет (если только нет какой-то привязки к файловой системе, с которой я не знаком).

Редактируете ли вы файл каким-то стандартным способом? Если да, то было бы проще автоматизировать команду с этой точки зрения, а не с системного уровня.

Если вы расскажете нам больше о ситуации, мы сможем дать вам более точные ответы.

решение3

Если вы используете систему контроля версий (а если нет, то вам определенно стоит это сделать!), вы можете настроить хук коммита. Просто выберите программу контроля версий, которая позволяет это делать, большинство из них это делают.

решение4

Установитьinotify-инструменты.

Чтобы отслеживать отдельный файл и выполнять команду при его изменении:

inotifywait -m --format %w FILENAME | while read file; do
  COMMAND ${file}
done

где

  • FILENAME: имя файла, который вы хотите посмотреть
  • COMMAND: команда, которую вы хотите выполнить при изменении файла
  • -m: возможность слушать бесконечно

inotifywaitможет выводить больше информации, чем просто имя файла (через --format), проверьте man inotifywait, что еще он может делать (это довольно короткое чтение). Плюс,Примерына вики дайте некоторое представление.

Кто-то, вероятно, должен обернуть эти команды в удобный скрипт, который делает именно то, что вы просили.

convenience-script FILENAME COMMAND

Связанный контент