Пример: пересобирать документ LaTeX при изменении (сохранении) одного из исходных файлов.
Решение: остлеживать изменения можно с помощью утилит inotify-tools. Одна утилита,
inotifywait
ждёт указанных изменений и после этого завершается с тем или иным кодом возврата. Если произошло ожидаемое событие, код возврата 0
(успех). Именно inotifywait
и используется в моём примере ниже. Другая утилита, inotifywatch
, наблюдает за файлами и собирает информацию об изменениях, на выходе выводит табличку того, что заметила. Примеры применения этой утилиты смотрите на сайте inotify-tools, там же есть и дополнительные примеры использования inotifywait
.Пример использования: в данном случае я предполагаю, что все исходные файлы документа LaTeX лежат в текущем каталоге, а для сборки достаточно использовать
pdflatex
и bibtex
. Вечный цикл: ждём любых изменений файлов текста или библиографии (первая команда цикла), в случае успеха (обнаруженных изменений) исполняем все нужные команды сборки документа (вторая команда цикла).while true ; do \
inotifywait *.tex *.bib \
&& ( pdflatex -interaction=nonstopmode mypaper && \
bibtex mypaper && \
pdflatex -interaction=nonstopmode mypaper ) \
done
Естественно, применять можно для чего угодно, не только для LaTeX.
P.S. Вариант запуска LaTeX с опцией
-interaction=nonstopmode
позволяет с одной стороны избежать запроса интерактивного ввода в случае ошибки компиляции, а с другой стороны, позволяет эти ошибки компиляции всё же увидеть.P.P.S. Рецепт работает только в линуксе. Для *BSD есть библиотечка pnotify и kqueue.