Bei jeder Änderung einer Datei automatisch einen Befehl ausführen

Bei jeder Änderung einer Datei automatisch einen Befehl ausführen

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:

incronwurde 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öchten
  • COMMAND: Befehl, den Sie bei der Dateiänderung ausführen möchten
  • -m: Option zum unbegrenzten Zuhören

inotifywaitkann 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

verwandte Informationen