
Jedes Mal, wenn ich Änderungen an einer Datei vornehme und sie speichere, möchte ich, dass ein Befehl ausgeführt wird. Ich kann ein Ruby-Skript einrichten, das die Datei überwacht und den Befehl nach Wunsch ausführt, aber mir fällt ein, dass es dafür eine einfache Unix-Methode geben müsste. Gibt es die? Um es etwas weniger vage auszudrücken: Ich verwende Ubuntu 8.10.
Bearbeiten:
incron
wurde vorgeschlagen und sieht gut aus. Aber ich habe Probleme, es zum Laufen zu bringen (Bearbeiten: Der Befehl scheint nicht ausgeführt zu werden, wenn ich eine Datei im angegebenen Verzeichnis speichere, oder mein Befehl ist fehlerhaft). Ich habe incron installiert und die Incron-Tabelle meines Benutzers mit incrontab eingerichtet und den Benutzer zur Liste der zulässigen Benutzer hinzugefügt. Meine spezielle Situation ist das Bearbeiten einer TeX-Datei. Ich möchte, dass der Befehl sie als PDF rendert und jedes Mal ausgeführt wird, wenn ich die TeX-Datei bearbeite und speichere. Dies ist also der Incron-Tabelleneintrag, den ich erstellt habe:
/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex
Was mache ich falsch?
Antwort1
Sie sagen nicht, welches Unix Sie verwenden, aber Linux hatinoffiziellund da sindinotify-toolsUndinkron.
Da ist einRuby-Schnittstellezu inotify.
Antwort2
Nicht direkt, nein (es sei denn, es gibt eine Art Hook für ein Dateisystem, mit dem ich nicht vertraut bin).
Bearbeiten Sie die Datei mit einer Standardmethode? In diesem Fall wäre es einfacher, den Befehl aus dieser Perspektive zu automatisieren, als auf Systemebene.
Wenn Sie uns mehr über die Situation erzählen, können wir Ihnen möglicherweise bessere Antworten geben.
Antwort3
Wenn Sie zufällig eine Versionskontrolle verwenden (und wenn nicht, sollten Sie das unbedingt tun!), können Sie einen Commit-Hook einrichten. Wählen Sie einfach ein Versionskontrollprogramm, das Ihnen dies ermöglicht. Die meisten bieten dies an.
Antwort4
Installiereninotify-tools.
So überwachen Sie eine einzelne Datei und führen bei einer Änderung einen Befehl aus:
inotifywait -m --format %w FILENAME | while read file; do
COMMAND ${file}
done
Wo
FILENAME
: Name der Datei, die Sie ansehen möchtenCOMMAND
: Befehl, den Sie bei der Dateiänderung ausführen möchten-m
: Option zum unbegrenzten Zuhören
inotifywait
kann mehr Informationen ausgeben als nur den Dateinamen (via --format
), sehen Sie sich an man inotifywait
, was es sonst noch kann (es ist eine ziemlich kurze Lektüre). Außerdem ist dieBeispieleim Wiki geben einige Einblicke.
Jemand sollte diese Befehle wahrscheinlich in ein praktisches Skript einbinden, das genau das tut, was Sie verlangt haben mit
convenience-script FILENAME COMMAND