watchexec🔗

watchexec es una herramienta que ejecuta un comando cada vez que detecta una modificación dentro de alguna ubicación en el sistema de archivos local.

Lo anterior permite, entre otros muchos casos:

  • Ejecutar pruebas unitarias cada vez que guardemos cambios en el editor de texto o IDE.
  • Dar formato o analizar (mediante análisis estático o búsqueda de code smells) el código fuente cada vez que guardemos cambios en el editor de texto o IDE.
  • Reiniciar la ejecución de algún proceso, un servidor de HTTP por ejemplo, cada vez que guardemos cambios en el editor de texto o IDE.

Como ejemplo, teniendo la carpeta $HOME/proyecto/docs con mkdocs (para la generación de documentación) y $HOME/proyecto/Makefile con el siguiente contenido:

PORT = 9090

generate-docs :
    mkdocs build --clean --quiet

preview-docs :
    -pkill -f 'thttpd -p $(PORT)'
    @thttpd -p $(PORT) -T UTF-8 -nor -M 0 -l /dev/null -d site
    @echo "http://localhost:$(PORT)"

all : generate-docs preview-docs

.DEFAULT_GOAL := all
.PHONY : generate-docs preview-docs
.SILENT : preview-docs

Se puede ejecutar lo siguiente para que cada vez que se presente alguna modificación en los archivos de Markdown, dentro de docs, se re-genere la carpeta site y se reinicie el servidor HTTP thttpd, de tal manera que http://localhost:9090 muestre el contenido actualizado de site:

[nihilipster@localhost:~/proyecto]$ watchexec --filter docs make

Algunas alternativas a watchexec serían fswatch, watchman, direvent y entr.

Fuentes🔗