Tun Sie etwas, wenn eine Datei geändert wird


10

Wenn ich ein LaTeX-Dokument schreibe, drücke ich in meinem Editor F6, um häufig zu kompilieren. Oder wenn ich SASS verwende, tippe ich oft make, um meine .scssin umzuwandeln .css.

Jetzt möchte ich die Maschine makejedes Mal die Drecksarbeit machen und laufen lassen oder etwas anderes, wenn sich eine bestimmte Datei ändert.

Bisher habe ich ein Terminalfenster offen gehalten und den Pfeil nach oben gedrückt und bin zurückgekehrt. Oder ich habe verwendet watch make, aber das scheint eine seltsame Lösung zu sein.

Gibt es unter Linux eine gute Möglichkeit, etwas zu tun, wenn sich eine bestimmte Datei ändert?

Antworten:


4

Sie suchen inotifywait, Teil von Inotify-Tools . Es gibt einige Beispiele für die Verwendung auf der Projektwebsite, aber ein einfacher Ansatz ist:

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

der Schlüsselteil davon ist,

inotifywait code.cpp -e modify

Dieser Befehl wartet, bis er code.cppgeändert wurde, und beendet ihn dann. Setzen Sie die Endlosschleife ein und führen Sie makesie an, damit sie nach jeder Änderung ständig neu erstellt wird.

Neben dem Warten auf Änderungen können Sie auch auf das Erstellen, Löschen, Zugreifen, Öffnen, Schließen und mehr warten. Ich empfehle dringend, in den Projektbeispielen und in der Manpage inotifywait nach weiteren Ideen zu suchen, wie es verwendet werden kann.


Genau das suche ich!
Martin Ueding

1

Schauen Sie sich incron an , ein Cron-ähnliches Paket, das auf Dateisystemereignisse anstelle von Zeitereignissen reagiert. Das Paket besteht aus einem Daemon ( incrond) und einem Tabellenmanipulator ( incrontab), analog zu dem bekannten crond/ crontabPaar Cron.

Mit incron können Sie problemlos die Ausführung veranlassen, makewenn bestimmte Dateien und / oder Verzeichnisse geändert werden.


Das scheint einerseits ein wenig übertrieben zu sein, andererseits ist es genau das richtige Werkzeug. Ich muss es überprüfen, vielleicht kann ich es für jede Programmiersitzung aktivieren und deaktivieren.
Martin Ueding

0

Anstatt watch makewie wäre es watch ls? Dann genau dann, makewenn sich der Zeitstempel ändert.


Nun, machen Sie bereits Überprüfungen der Zeitstempel, so dass es ziemlich sinnlos ist, die Zeit zu überprüfen und dann die Zeit erneut überprüfen zu lassen.
Martin Ueding

Richtig, aber das Laufen von make ist teurer als das Laufen von ls.
Scott C Wilson

1
Und wenn mein Makefile nur zwei Zeilen für diese Single enthält .tex? Denken Sie, dass es sich lohnt, einen lsParser zu schreiben ?
Martin Ueding
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.