Программа для повторного запуска, например `make` при изменении файлов? - PullRequest
6 голосов
/ 07 декабря 2010

Есть ли программа, которая автоматически перезапустится, например, make, когда файлы изменятся?

Например, когда я пишу sphinx документацию, было бы неплохо, если бы make html запускался автоматически каждый раз, когда я редактировал соответствующие файлы.

Ответы [ 7 ]

8 голосов
/ 04 мая 2012

Для простых вещей хорошо подойдет повторный запуск: http://pypi.python.org/pypi/rerun

"Исполняемый скрипт командной строки Python для повторного запуска данной команды каждый раз, когда файлы изменяются в текущем каталоге или его подкаталогах."

Требуется интерпретатор Python, но не имеет значения, написаны ли ваша команда или файлы на Python.

Usage

rerun [--help|-h] [--verbose|-v] [--ignore|-i=<file>] [--version] <command>
Where:

<command>           Command to execute
--help|-h           Show this help message and exit.
--ignore|-i=<file>  File or directory to ignore. Any directories of the
                    given name (and their subdirs) are excluded from the
                    search for changed files. Any modification to files of
                    the given name are ignored. The given value is
                    compared to basenames, so for example, "--ignore=def"
                    will skip the contents of directory "./abc/def/" and
                    will ignore file "./ghi/def". Can be specified multiple
                    times.
--verbose|-v        Display the names of changed files before the command
                    output.
--version           Show version number and exit.
4 голосов
/ 01 декабря 2017

В Linux вы можете использовать эту командную строку:

while true; do inotifywait -e close_write  *.py; make; done

Использует стандартную системную команду inotifywait, если она недоступна, установить что-то вроде:

sudo apt install inotify-tools
3 голосов
/ 07 декабря 2010

Ну, так как make не будет ничего делать, если ничего не изменилось, как насчет

while true; do sleep 60; make html; done

или эквивалент в выбранной вами оболочке? Я не думаю, что обычные слои файловой системы управляются событиями таким образом, что вы будете уведомлять вас об изменениях файлов, не делая ничего подобного сами, но, возможно, DBUS может делать такие вещи.

2 голосов
/ 07 декабря 2010

Вы можете использовать inotifywait в цикле: https://github.com/rvoicilas/inotify-tools/wiki/#info

1 голос
/ 28 декабря 2015

Согласно ответу https://stackoverflow.com/a/22907316/71522 watchman, кажется, работает очень хорошо:

 $ watchman-make -p '*.c' 'Makefile' -t all

Повторно запускается make all каждый раз, когда изменяется любой файл *.c или Makefile.

Может быть установлен с:

$ brew install watchman
1 голос
/ 07 декабря 2010

Вы можете использовать incron: http://inotify.aiken.cz/?section=incron&page=about&lang=en

0 голосов
/ 01 марта 2017

Этот вопрос также задавался здесь: https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes/

Вы можете попробовать рефлекс

# Rerun make whenever a .c file changes
reflex -r '\.c$' make
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...