Índice
La idea de querer ejecutar un script al modificar un fichero surgió a raiz del artículo donde expliqué cómo editar y crear archivos cifrados con GPG en Vim. Aunque parezca un poco dificil encontrarle utilidad a esta idea, puede resultar bastante cómodo por ejemplo compilar automáticamente un programa cada vez que modificamos el código, borrar ficheros generados automáticamente etc, hay multidud de aplicaciones posibles en función de nuestras necesidades.
A mi personalmente me hacía falta para cifrar un archivo automáticamente tras modificarlo, pero más tarde caí en la cuenta de que eso ya lo hace el plugin de Vim.
Antes de poder usar el script es necesario instalar inotify-tools
# aptitude install inotify-tools
Hecho esto, ahora es posible ejecutar el script que he creado:
function help {
echo "$0 <directory> <file to="to" watch="watch"> <script to="to" execute="execute">"
}
if [ "$#" -ne 3 ]; then
help
exit 1
fi
while true; do
change=$(inotifywait -e close_write $1)
echo $change
change=${change#./ * }
if [ "$change" = "$2" ]; then ./$3; fi
done
El script recibe 3 parámetros; El directorio donde se encuentra el fichero, el nombre del fichero y el script a ejecutar al detectar cambios. Veamos un ejemplo trivial que simplemente escribirá un texto al final del fichero:
$ cat ejemplo
elbauldelprogramador.com
$ cat script.sh
#!/bin/bash
echo "Script ejecutado tras editar" >> ejemplo
$ ./notifyChangesOnFile.sh . ejemplo script.sh
Setting up watches.
Watches established.
./ CLOSE_WRITE,CLOSE ejemplo
Setting up watches.
Watches established.
Tras ejecutar notifyChangesOnFile.sh abrimos el fichero de ejemplo con cualquier editor y cuando guardemos aparece en pantalla ./ CLOSE_WRITE,CLOSE ejemplo
indicando que se ha modificado. Si volvemos a mirar el fichero de ejemplo su contenido es:
$ cat ejemplo
elbauldelprogramador.com
escribimos algo para modificar el fichero y guardamos
Script ejecutado tras editar
Espero que sea de utilidad, el repositorio de inotify-tools está en github (Enlace en las referencias).
Referencias
- Repositorio inotify-tools | Visitar sitio
- inotify | inotify.aiken.cz
- How to execute a command whenever a file changes? | superuser.com
- Bash: Execute script on file save? | stackoverflow
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.