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?

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.


¡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.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.