Exécuter le script lors du changement de fichier sur Mac OS X

8

Quelqu'un connaît-il un programme pour Mac OS que vous pouvez transmettre le nom à un exécutable et un fichier à regarder, afin qu'il exécute ensuite l'exécutable à chaque fois que le fichier surveillé change?

J'ai quelque chose comme ça en tête:

$ 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
la source

Réponses:

6

Vous pouvez configurer cela à l'aide de launchd . Plus précisément, vous devez utiliser la clé watchpaths dans votre liste launchd pour rechercher les modifications dans ce fichier.

Informations exhaustives disponibles dans cet article AFP548 .

Bien qu'il semble qu'il ne soit plus en cours de développement, Lingon est une application fournissant un moyen graphique de configurer ces fichiers plist launchd.

ÉDITER:

En gros, voici ce que vous feriez en utilisant vos exemples de chemins ci-dessus. Enregistrez un fichier nommé com.superuser.run-pdflatex.plistavec le contenu suivant dans~/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>

Ensuite, vous devez taper launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plistdans le terminal pour charger votre démon d'observation des fichiers.

Ce qui précède n'est pas testé, mais c'est l'idée générale.

ghoppe
la source
2

Vous pouvez le faire dans Automator. C'est sous Folder Option dans le flux de travail de l'automate je crois (pas devant un Mac). Ensuite, vous attachez simplement le script au dossier et il se déclenchera chaque fois qu'un fichier est ajouté / modifié.

MDMarra
la source
Je ne peux pas vraiment suivre. Je suis nouveau sur Automator, mais pour autant que je sache, vous ne pouvez pas choisir quand exécuter votre script mais seulement quoi faire lorsqu'il est exécuté. Il y a les actions de dossier dans Mac OS que je pourrais utiliser également, mais je pensais qu'AppleScript n'a que l'action "sur l'ajout d'éléments de dossier à" mais rien de tel que "sur la modification des éléments de dossier dans".
Johannes
Vous avez raison @Johannes. Bien qu'il existe des actions de dossier pour ajouter des éléments de dossier, supprimer des éléments de dossier, déplacer la fenêtre de dossier, fermer la fenêtre de dossier et ouvrir le dossier, il n'existe aucune action de dossier pour détecter les modifications apportées aux fichiers. Vous pouvez le voir en ouvrant le dictionnaire StandardAdditions.osax dans l'éditeur Applescript.
ghoppe