Ejecutar automáticamente un comando cada vez que se cambia un archivo

Ejecutar automáticamente un comando cada vez que se cambia un archivo

Cada vez que hago algunos cambios en un archivo y lo guardo, me gustaría ejecutar un comando. Puedo configurar un script Ruby que pueda monitorear el archivo y ejecutar el comando como quisiera, pero se me ocurre que debería haber alguna forma sencilla de Unix para hacer esto. ¿Está ahí? Estoy en Ubuntu 8.10, para ser un poco menos vago.

Editar:

incronFue sugerido y se ve bien. Pero tengo problemas para que funcione (editar: el comando no parece ejecutarse cuando guardo un archivo en el directorio especificado, o mi comando es defectuoso). Instalé incron y configuré la tabla incron de mi usuario usando incrontab, y agregué al usuario a la lista permitida. Mi situación específica es editar un archivo TeX. Quiero que el comando lo represente como PDF para ejecutarlo cada vez que edite y guarde el archivo TeX. Esta es la entrada de la tabla incron que se me ocurrió:

/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex

¿Qué estoy haciendo mal?

Respuesta1

No dices qué Unix estás usando, pero Linux tieneinotificary aquí estánherramientas-inotifyyincron.

Hay uninterfaz rubípara notificar.

Respuesta2

No directamente, no (a menos que haya algún tipo de gancho en un sistema de archivos con el que no estoy familiarizado).

¿Edita el archivo mediante algún método estándar? Si es así, sería más fácil automatizar el comando desde ese ángulo, que desde el nivel del sistema.

Si nos cuenta más sobre la situación, es posible que podamos darle mejores respuestas.

Respuesta3

Si utiliza el control de versiones (y si no lo hace, ¡ciertamente debería hacerlo!), puede configurar un enlace de confirmación. Simplemente elija un programa de control de versiones que le permita hacer eso, la mayoría lo hace.

Respuesta4

Instalarherramientas-inotify.

Para observar un solo archivo y ejecutar un comando cuando cambia:

inotifywait -m --format %w FILENAME | while read file; do
  COMMAND ${file}
done

dónde

  • FILENAME: nombre del archivo que deseas ver
  • COMMAND: comando que desea ejecutar en el cambio de archivo
  • -m: opción para escuchar indefinidamente

inotifywaitpuede generar más información que solo el nombre del archivo (a través de --format), consulte man inotifywaitqué más puede hacer (es una lectura bastante corta). Además, elejemplosen la wiki da una idea.

Alguien probablemente debería incluir estos comandos en un script conveniente que haga exactamente lo que usted solicitó.

convenience-script FILENAME COMMAND

información relacionada