Hacer algo cuando se cambia un archivo

10

Cuando escribo un documento de LaTeX, me encuentro presionando F6 en mi editor para compilar a menudo. O cuando uso SASS, a menudo escribo makepara convertir mi .scssen .css.

Ahora me gustaría dejar que la máquina haga el trabajo sucio y se ejecute makeo algo más cada vez que cambie un archivo determinado.

Hasta ahora mantuve una ventana de terminal abierta y presioné flecha arriba y volver. O solía watch make, pero eso parece una solución extraña.

¿Hay una buena manera en Linux de hacer algo cuando cambia un archivo determinado?

Martin Ueding
fuente

Respuestas:

4

Estás buscando inotifywait, parte de las herramientas de inotify . Hay algunos ejemplos de cómo usarlo en el sitio del proyecto, pero un enfoque simple es,

while true; do inotifywait code.cpp -e modify; make; done

la parte clave de la cual es,

inotifywait code.cpp -e modify

Ese comando esperará hasta que code.cppse modifique y luego saldrá . Poner en el bucle infinito y seguido con makehace que se reconstruya constantemente después de cada modificación.

Además de esperar en la modificación, puede esperar en la creación, eliminación, acceso, apertura, cierre y más. Recomiendo mirar los ejemplos de proyectos y la página de manual de inotifywait para algunas otras ideas sobre cómo se puede usar.

lostriebo
fuente
¡Eso es exactamente lo que estoy buscando!
Martin Ueding
1

Eche un vistazo a incron , un paquete tipo cron que responde a eventos del sistema de archivos, en lugar de eventos de tiempo. El paquete consiste en un daemon ( incrond) y un manipulador de tabla ( incrontab), análogo al conocido crond/ crontabpar de cron.

Con incron, puede organizar fácilmente la ejecución makecada vez que se modifiquen determinados archivos y / o directorios.

Steven Monday
fuente
Eso parece un poco exagerado, por un lado, pero por otro es la herramienta adecuada. Tendré que verificarlo, tal vez pueda habilitarlo y deshabilitarlo para cada sesión de programación.
Martin Ueding
0

En lugar de watch make, ¿qué tal watch ls? Entonces, justo makecuando cambia la marca de tiempo.

Scott C Wilson
fuente
Bueno, haga que ya verifique las marcas de tiempo, por lo que no tiene sentido comprobar la hora y luego dejar que verifique la hora nuevamente.
Martin Ueding
Correcto, pero ejecutar make es más caro que ejecutar ls.
Scott C Wilson
1
¿Y si mi archivo MAKE son solo dos líneas para ese sencillo .tex? ¿Crees que valdría la pena escribir un lsanalizador sintáctico?
Martin Ueding