¿Cómo detectar automáticamente los cambios de file y realizar una acción personalizada dentro de shell?

Por ejemplo, me gustaría ejecutar automáticamente YUI Compressor siempre que edite un file de código fuente de JavaScript para generar una versión comprimida.

Idealmente, el process no se ejecuta en segundo plano, sino en un shell dedicado, por lo que fácilmente puede terminar el process al final del día.

  • ¿Cómo puedo iniciar una connection de módem desde la command-line?
  • AirDrop: ¿Cómo acceder a AirDrop desde la command-line?
  • Utilizar mdfind para identificar todos los dmg encryptions?
  • ¿Puede grep destacar el text coincidente sin ocultar el contenido del file?
  • Instalar shuf en OS X?
  • ¿Cómo iniciar aplicaciones OS X desde la command-line con arguments opcionales?
  • ¿Cuál sería la forma más limpia y flexible de ver files y / o directorys específicos para los cambios de files y realizar una acción personalizada dentro de una shell?

  • ¿Cómo puedo "Obtener información" desde la command-line?
  • ¿Se pueden hacer insensibles los commands de command-line al order de nombres de file y opciones?
  • Instalar shuf en OS X?
  • ¿Cómo iniciar aplicaciones OS X desde la command-line con arguments opcionales?
  • ¿Hay una manera de acceder a la geolocation de un Mac desde el terminal?
  • ¿Puede grep destacar el text coincidente sin ocultar el contenido del file?
  • 2 Solutions collect form web for “¿Cómo detectar automáticamente los cambios de file y realizar una acción personalizada dentro de shell?”

    El $ 25 Codekit vigila las carpetas y los files para los cambios y comprime / minify / combine files del Javascript y de CSS.

    Sé que esto es sólo una respuesta parcial para su pregunta, ya que no es un vigilante genérico, pero sí encaja con su ejemplo:

    siempre que edite un file de código fuente de JavaScript para generar una versión comprimida

    Ver un file para los cambios se puede llevar a cabo con un LaunchAgent. Por ejemplo, cree un file plist en ~/Library/LaunchAgents/watch.and.lol.plist y rellénelo 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/Shanetworking/changeAction.sh</string> <string>-force</string> </array> <key>WatchPaths</key> <array> <string>/private/var/radmind/client/.radmindOnDemand</string> </array> </dict> </plist> <? xml version = "1.0" encoding = "UTF-8"?> <?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/Shanetworking/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 file /private/var/radmind/client/.radmindOnDemand existe. Luego cargue el launchagent con el command $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist . Tan pronto como el file ~/Library/LaunchAgents/watch.and.lol.plist ya no exista, este trabajo launchagent se downloadá.

    Ahora escribe algún script de shell que vigila tu file para los 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 script de shell necesita un trabajo adicional que se debe hacer para que sea eficiente. Ahora sondea cada 2 segundos ( sleep 2 ). Mejor es salir de la secuencia de commands después de ejecutar el command de compile . Esto requiere el almacenamiento de la salida del command hash md5 que puede sobrevivir a la salida y relauch de este script de shell.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).