Ejecutar script en cambio de archivo en Mac OS X

8

¿Alguien sabe acerca de un programa para Mac OS en el que pueda pasar el nombre a un archivo ejecutable y a un archivo para que lo vea, de modo que luego ejecute el ejecutable cada vez que cambie el archivo que se está viendo?

Tengo algo como esto en mente:

$ 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
fuente

Respuestas:

6

Puede configurar esto usando launchd . Específicamente, debe usar la clave de rutas de seguimiento en su lista de inicio para buscar cambios en ese archivo.

Información exhaustiva disponible en este artículo AFP548 .

Aunque parece que ya no está en desarrollo, Lingon es una aplicación que proporciona una forma de GUI para configurar estos archivos de inicio.

EDITAR:

Aproximadamente, esto es lo que haría usando sus rutas de muestra anteriores. Guarde un archivo com.superuser.run-pdflatex.plistcon el siguiente contenido en~/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>

Luego escribirías launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plisten la terminal para cargar tu demonio de observación de archivos.

Lo anterior no ha sido probado, pero esa es la idea general.

ghoppe
fuente
2

Puedes hacerlo en Automator. Está bajo la opción de carpeta en el flujo de trabajo del automatizador, creo (no frente a una Mac). Luego, simplemente adjunte el script a la carpeta y se activará cada vez que se agregue / cambie un archivo.

MDMarra
fuente
No puedo seguirlo del todo. Soy nuevo en Automator, pero que yo sepa, no puedes elegir cuándo ejecutar tu script, sino solo qué hacer cuando se ejecuta. Existen las acciones de carpeta en Mac OS que también podría usar, pero pensé que AppleScript solo tiene la acción "al agregar elementos de carpeta a" pero nada como "al cambiar elementos de carpeta en".
Johannes
Tienes razón @Johannes. Si bien hay acciones de carpeta para agregar elementos de carpeta, eliminar elementos de carpeta, mover la ventana de carpeta, cerrar la ventana de carpeta y abrir la carpeta, no hay Acción de carpeta para detectar cambios en los archivos. Puede ver esto abriendo el diccionario StandardAdditions.osax en Applescript Editor.
ghoppe