Зробіть щось, коли файл буде змінено


10

Коли я пишу документ LaTeX, я можу часто натискати клавішу F6 у своєму редакторі, щоб компілювати. Або коли я використовую SASS, я часто набираю текст, makeщоб перетворити його .scssв .css.

Тепер я хотів би дозволити машині виконувати брудну роботу та запускати makeабо щось інше кожного разу, коли зміна заданого файлу.

Поки я тримав вікно терміналу відкритим і натискав стрілку вгору та повертався. Або я використав watch make, але це здається дивним рішенням.

Чи є хороший спосіб в Linux зробити щось, коли зміниться даний файл?

Відповіді:


4

Ви шукаєте inotifywait, частина інструментів inotify . Є кілька прикладів того, як його використовувати на сайті проекту, але простий підхід,

while true; do inotifywait code.cpp -e modify; make; done

ключовою частиною якої є:

inotifywait code.cpp -e modify

Ця команда буде чекати, поки не code.cppбуде змінено, а потім вийти. Помістіть у нескінченний цикл і слідуйте за makeтим, щоб він постійно відновлювався після кожної модифікації.

Окрім очікування зміни, ви можете дочекатися створення, видалення, доступу, відкриття, закриття тощо. Я настійно рекомендую переглянути приклади проекту та inotifywait сторінку людини для отримання інших ідей щодо того, як це можна використовувати.


Це саме те, що я шукаю!
Мартін Удінг

1

Подивіться на incron , на кронподібний пакет, який відповідає на події файлової системи замість подій часу. Пакет складається з демона ( incrond) і маніпулятора таблиці ( incrontab), аналогічного відомому crond/ crontabпарі кронів.

За допомогою incron ви можете легко домовитись про запуск makeкожного разу, коли конкретні файли та / або каталоги змінюються.


З одного боку, це здається невеликим зайвим, але з іншого - це лише правильний інструмент. Мені доведеться перевірити це, можливо, я можу ввімкнути та відключити його для кожного сеансу програмування.
Мартін Удінг

0

Замість того watch make, як про це watch ls? Тоді саме makeтоді, коли часова мітка змінюється.


Ну, зробіть вже перевірку часових позначок, тому перевіряти час досить безглуздо, а потім дозволити ще раз перевірити час.
Мартін Удінг

Правильний, але біг зробити дорожче, ніж запуск ls.
Скотт C Вілсон

1
А якщо мій makefile - це лише два рядки для цього синглу .tex? Як ви вважаєте, чи варто було б написати lsаналізатор?
Мартін Удінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.