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

Каждый раз, когда я делаю какие-либо изменения в файле и сохраняю, я хотел бы запустить команду. Я могу настроить скрипт на 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

Что я делаю неправильно?

4 ответа

Решение

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

Существует интерфейс Ruby для inotify.

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

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

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

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

Установите inotify-tools.

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

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

где

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

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

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

convenience-script FILENAME COMMAND
Другие вопросы по тегам