Назад | Перейти на главную страницу

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

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

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

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

Eсть Ruby интерфейс информировать.

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

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

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

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

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

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

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

где

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

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

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

convenience-script FILENAME COMMAND