2010-07-19 15 views
5

Ich möchte Bash verwenden, um eine Testsuite automatisch auszuführen, wenn ich eine Datei in einem bestimmten Verzeichnis speichere.Bash: Script bei Dateisicherung ausführen?

Gibt es einen Mechanismus für bash, um ein bestimmtes Skript bei Speicherereignissen auszuführen?

Danke.

:: EDIT ::

Ich hätte erwähnt, dass ich auf mit OSX bin.

Antwort

5

Bearbeitet: Sie (das OP) erwähnt, dass Sie OSX verwenden. Mir sind keine ähnlichen Tools auf OSX bekannt. Es gibt einen Low-Level-Systemaufruf (geerbt von BSD) mit dem Namen "", aber Sie müssten Ihr eigenes Tool auf Benutzerebene implementieren. Es gibt eine Beispielanwendung von Apple, genannt "Watcher", aber es ist nur ein Beweis des Konzepts und tut nicht, was Sie wollen.

Es gibt another thread darüber auf Stack Overflow (auch nicht eindeutig).

Aus Mangel an einem geeigneten Werkzeug, wenn Sie eine bestimmte Programmiersprache verwenden, würde ich empfehlen, nach Lösungen zu suchen, die bereits dafür geschrieben wurden. Ansonsten denke ich, Sie zu der Wahl stecken und die Verwaltung der Änderungen selbst ...

Hier ist meine ursprünglicher, Linux-basierte Antwort, für Archivierungszwecke:

Wenn Sie Linux verwenden, mögen Sie vielleicht Werfen Sie einen Blick auf inotify. Genauer gesagt können Sie inotify-tools installieren, einschließlich inotifywait.

Damit können Sie Dateien und Verzeichnisse für eine Reihe von Ereignissen überwachen, z. B. Zugriff, Änderung, Öffnen, Schließen und viele andere. inotifywait verlassen kann, sobald das angegebene Ereignis erkannt wurde, und so eine einfache Schleife würden Sie bekommen, was Sie wollen:

while :; do 
    inotifywait -e modify /some/directory 
    run_test_suite 
done 

By the way, bereits viele Programmiersprachen und Umgebungen ihren eigenen Dauertest Läufer haben (zum Beispiel, mit Python könnte man ua tdaemon verwenden).

0

Sie können incron verwenden, um zu erkennen, wenn eine Datei geschlossen wurde.

0

Verwenden Sie dnotify nur, wenn inotify in Ihrem System nicht verfügbar ist (Linux Kernel < 2.6.13).

dnotify ist Standard-Linux-Methode Verzeichnisse zu sehen:

http://en.wikipedia.org/wiki/Dnotify

Codebeispiel. Schauen dir für Änderungen:


dnotify WATCH_DIR -M -e SCRIPT_TO_EXECUTE 

Bitte beachten Sie SCRIPT_TO_EXECUTE jedes Mal ausgeführt wird, wenn eine Datei in WATCH_DIR Änderungen.

+2

See erklärt [diese FAQ] (http://inotify.aiken.cz/?section=inotify&page=faq&lang=en) (vierte Frage und die Seite es Links zu) . –

+0

dnotify sieht perfekt aus, außer ich bin auf einem Mac.Tut mir leid, ich hätte das in meinem Post erwähnen sollen. – Thomas

+0

Ich sollte an zweiter Stelle stehen, worauf Dennis hinwies: Verwenden Sie nicht dnotify, stattdessen inotify. – rbp