6 votos

¿Cómo vigilar automáticamente los cambios en los archivos y realizar una acción personalizada dentro del shell?

Por ejemplo, me gustaría ejecutar automáticamente Compresor YUI cada vez que edito un archivo fuente de JavaScript para obtener una versión comprimida.

Lo ideal es que el proceso no se ejecute en segundo plano, sino en un intérprete de comandos dedicado, de modo que pueda terminar fácilmente el proceso al final del día.

¿Cuál sería la forma más limpia y flexible de vigilar archivos y/o directorios específicos para los cambios de archivos y realizar una acción personalizada dentro de un shell?

2voto

Pro Backup Puntos 2314

Los 25 dólares Codekit vigila las carpetas y los archivos en busca de cambios y comprime/minifica/combina los archivos JavaScript y CSS.

Sé que esto es sólo una respuesta parcial para su pregunta, ya que no es un observador genérico, pero se ajusta a su ejemplo:

cada vez que edito un archivo fuente de JavaScript para dar salida a un archivo comprimido versión

1voto

Pro Backup Puntos 2314

La vigilancia de un archivo para los cambios se puede lograr con un LaunchAgent. Por ejemplo, crear un archivo plist en ~/Library/LaunchAgents/watch.and.lol.plist y llenarlo con este contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>watch.and.lol</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Shared/changeAction.sh</string>
        <string>-force</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/private/var/radmind/client/.radmindOnDemand</string>
    </array>
</dict>
</plist>

Ahora asegúrese de que el archivo /private/var/radmind/client/.radmindOnDemand existe. A continuación, cargue el launchagent con el comando $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist . En cuanto el archivo ~/Library/LaunchAgents/watch.and.lol.plist ya no existe, este trabajo de launchagent se descargará.

Ahora escribe algún shell script que vigile tu archivo en busca de cambios, como:

chsum1=""

while [[ true ]]
do
    chsum2=`md5 /private/var/radmind/client/.radmindOnDemand`
    if [[ $chsum1 != $chsum2 ]] ; then           
        compile
        chsum1=`md5 /private/var/radmind/client/.radmindOnDemand`
    fi
    sleep 2
done

Nota: este shell script necesita un poco de trabajo extra para hacerlo eficiente. Ahora sondea cada 2 segundos ( sleep 2 ). Mejor es salir del script después de la compile se ha ejecutado el comando. Eso requiere el almacenamiento de la salida del comando hash md5 que puede sobrevivir a la salida y relanzamiento de este shell script.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X