Führen Sie Script on File Change unter Mac OS X aus

8

Kennt jemand ein Programm für Mac OS, bei dem Sie den Namen an eine ausführbare Datei und eine zu überwachende Datei übergeben können, damit die ausführbare Datei jedes Mal ausgeführt wird, wenn die beobachtete Datei geändert wird?

Ich habe so etwas im Sinn:

$ fwatch /Users/foo/doc.tex /Users/foo/run-pdflatex.sh &
  fwatch running. Listening for changes in /Users/foo/doc.tex.
$ echo "This aint no LaTeX" > doc.tex
$ fwatch: Change in /Users/foo/doc.tex detected. Running /Users/foo/run-pdflatex.sh...
Johannes
quelle

Antworten:

6

Sie können dies mit launchd einrichten . Insbesondere müssen Sie den Watchpaths- Schlüssel in Ihrer Launchd-Liste verwenden , um nach Änderungen in dieser Datei zu suchen.

Ausführliche Informationen finden Sie in diesem AFP548-Artikel .

Obwohl es den Anschein hat, dass es sich nicht mehr in der Entwicklung befindet, ist Lingon eine Anwendung, die eine GUI-Möglichkeit zum Einrichten dieser Launchd-Plist-Dateien bietet.

BEARBEITEN:

Hier ist ungefähr, was Sie mit Ihren obigen Beispielpfaden tun würden. Speichern Sie eine Datei com.superuser.run-pdflatex.plistmit dem folgenden Inhalt in~/Library/LaunchAgents

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
    <string>com.superuser.run-pdflatex</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/Users/foo/run-pdflatex.sh</string>
    <key>ProgramArguments</key>
    <array>
            <string>run-pdflatex.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
            <string>/Users/foo/doc.tex</string>
    </array>
    </dict>
</plist>

Dann geben Sie launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plistdas Terminal ein, um Ihren Dateiüberwachungsdämon zu laden.

Oben ist ungetestet, aber das ist die allgemeine Idee.

Ghoppe
quelle
2

Sie können dies in Automator tun. Es befindet sich unter Ordneroption im Automator-Workflow, glaube ich (nicht vor einem Mac). Dann hängen Sie das Skript einfach an den Ordner an und es wird jedes Mal ausgelöst, wenn eine Datei hinzugefügt / geändert wird.

MDMarra
quelle
Ich kann nicht ganz folgen. Ich bin neu in Automator, aber soweit ich weiß, können Sie nicht auswählen, wann Ihr Skript ausgeführt werden soll, sondern nur, was zu tun ist, wenn es ausgeführt wird. Es gibt die Ordneraktionen in Mac OS, die ich auch verwenden könnte, aber ich dachte, AppleScript hat nur die Aktion "Hinzufügen von Ordnerelementen zu", aber nichts wie "Ändern von Ordnerelementen in".
Johannes
Sie sind richtig @Johannes. Während es Ordneraktionen zum Hinzufügen von Ordnerelementen, Entfernen von Ordnerelementen, Verschieben des Ordnerfensters, Schließen des Ordnerfensters und Öffnen des Ordners gibt, gibt es keine Ordneraktion zum Erkennen von Änderungen an Dateien. Sie können dies sehen, indem Sie das Wörterbuch StandardAdditions.osax im Applescript-Editor öffnen.
Ghoppe