Zrób coś, gdy plik zostanie zmieniony

10

Kiedy piszę dokument LaTeX, naciskam F6 w moim edytorze, by często kompilować. Lub kiedy używam SASS, często piszę, makeaby przekonwertować moje .scssna .css.

Teraz chciałbym pozwolić maszynie wykonywać brudną pracę i działać makelub coś innego za każdym razem, gdy zmienia się dany plik.

Do tej pory trzymałem otwarte okno terminala i naciskałem strzałkę w górę i wróciłem. Lub użyłem watch make, ale wydaje się to dziwnym rozwiązaniem.

Czy w Linuksie jest dobry sposób na zrobienie czegoś, gdy zmienia się dany plik?

Martin Ueding
źródło

Odpowiedzi:

4

Szukasz inotifywaitczęści inotify-tools . Istnieje kilka przykładów wykorzystania go na stronie projektu, ale proste podejście to:

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

którego kluczową częścią jest

inotifywait code.cpp -e modify

To polecenie zaczeka na code.cppmodyfikację, a następnie zakończy działanie. Włóż nieskończoną pętlę i postępuj zgodnie z makenią, aby stale się odbudowywać po każdej modyfikacji.

Oprócz czekania na modyfikację, możesz poczekać na tworzenie, usuwanie, dostęp, otwieranie, zamykanie i inne. Gorąco polecam przejrzeć przykłady projektu i stronę podręcznika inotifywait, aby znaleźć inne pomysły na to, jak można go użyć.

lostriebo
źródło
Właśnie tego szukam!
Martin Ueding
1

Spójrz na incron , pakiet podobny do crona, który reaguje na zdarzenia w systemie plików zamiast na zdarzenia czasowe. Pakiet składa się z daemon ( incrond) i manipulatora tabeli ( incrontab), analogicznie do znanej crond/ crontabpary cron.

Dzięki incron możesz łatwo zorganizować uruchomienie makeza każdym razem, gdy zostaną zmodyfikowane określone pliki i / lub katalogi.

Steven Monday
źródło
Z jednej strony wydaje się to trochę przesadne, ale z drugiej strony jest to właściwe narzędzie. Będę musiał to sprawdzić, może uda mi się włączyć i wyłączyć dla każdej sesji programowania.
Martin Ueding
0

A watch makemoże watch ls? Następnie, makegdy zmienia się znacznik czasu.

Scott C. Wilson
źródło
Cóż, zrób już sprawdzanie znaczników czasu, więc raczej nie ma sensu sprawdzać godziny, a następnie niech ponownie sprawdzi czas.
Martin Ueding
Racja, ale uruchomienie make jest droższe niż uruchomienie ls.
Scott C Wilson
1
A jeśli mój plik makefile to tylko dwie linie dla tego singla .tex? Czy uważasz, że warto byłoby napisać lsparser?
Martin Ueding