Fai qualcosa quando un file viene modificato


10

Quando scrivo un documento LaTeX, mi ritrovo a premere F6 nel mio editor per compilare spesso. O quando uso SASS, scrivo spesso makeper convertire il mio .scssin .css.

Ora vorrei lasciare che la macchina faccia il lavoro sporco ed esegua makeo qualcos'altro ogni volta che un determinato file cambia.

Finora ho tenuto aperta una finestra del terminale e ho premuto la freccia verso l'alto e il ritorno. Oppure l'ho usato watch make, ma sembra una soluzione strana.

C'è un modo carino su Linux di fare qualcosa quando cambia un determinato file?

Risposte:


4

Stai cercando inotifywait, parte di inotify-tools . Ci sono alcuni esempi di come usarlo sul sito del progetto, ma un approccio semplice è:

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

la parte chiave di cui è,

inotifywait code.cpp -e modify

Quel comando attenderà fino a quando non code.cppviene modificato, quindi esce. Metti in un ciclo infinito e seguito con makeprovoca la ricostruzione costante dopo ogni modifica.

Oltre ad attendere la modifica, puoi attendere la creazione, l'eliminazione, l'accesso, l'apertura, la chiusura e altro ancora. Consiglio vivamente di guardare gli esempi del progetto e di inotify in attesa della pagina man per alcune altre idee su come può essere usato.


Questo è esattamente quello che sto cercando!
Martin Ueding,

1

Dai un'occhiata a incron , un pacchetto simile a cron che risponde agli eventi del file system, anziché agli eventi temporali. Il pacchetto è composto da un demone ( incrond) e un manipolatore di tabelle ( incrontab), analogo al noto crond/ crontabpaio di cron.

Con incron, puoi facilmente organizzare l'esecuzione makeogni volta che particolari file e / o directory vengono modificati.


Sembra un po 'eccessivo da un lato, ma dall'altro è lo strumento giusto. Dovrò verificarlo, forse posso abilitarlo e disabilitarlo per ogni sessione di programmazione.
Martin Ueding,

0

Piuttosto che watch make, che ne dici watch ls? Quindi proprio makequando il timestamp cambia.


Bene, fai già controllare i timestamp, quindi è piuttosto inutile controllare l'ora e quindi far controllare di nuovo l'ora.
Martin Ueding,

Giusto ma eseguire make è più costoso che eseguire ls.
Scott C Wilson,

1
E se il mio makefile è solo due righe per quel singolo .tex? Pensi che varrebbe la pena scrivere un lsparser?
Martin Ueding,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.