Quiero generar el contenido de un archivo mientras cambian, por ejemplo, si tengo el archivo foobar
y lo hago:
magic_command foobar
El terminal actual debe mostrar el contenido del archivo y esperar hasta que, no sé, presione ^ C.
Entonces si desde otra terminal hago:
echo asdf >> foobar
El primer terminal debería mostrar la línea recién agregada además del contenido del archivo original (por supuesto, dado que no presioné ^ C).
Marcaré esto como tarea ya que quiero explorar y aprender Linux, pero no es tarea, es solo una curiosidad mía.
Respuestas:
Puedes usar
tail command
con-f
:Es una buena solución para espectáculos en tiempo real.
fuente
-F
(mayúscula f), que volverá a abrir el archivo si se elimina y se vuelve a crear en el camino.Si desea mostrar un archivo corto, que cabe en una pantalla de terminal, y lo que está cambiando es posiblemente todo el archivo, puede usar
watch
:watch cat example.txt
Muestra todo el archivo cada 2 segundos de forma predeterminada, incluido un encabezado opcional:
La opción
-d
(--differences
) resaltará los cambios de la versión anterior de la salida, o de la primera versión.fuente
Cuando necesito detectar cambios en el archivo y hacer algo diferente a lo
tail -f filename
que hago, lo he usadoinotifywait
en un script para detectar el cambio y actuar en consecuencia. Un ejemplo de uso se muestra a continuación. Consulteman inotifywait
para otros nombres de eventos e interruptores. Es posible que deba instalar elinotify-tools
paquete, por ejemplo a través desudo apt-get install inotify-tools
.Aquí está el script de ejemplo, llamado
exec-on-change
:En dos consolas ingresé los comandos de la siguiente manera (donde A> significa entrada en la consola A y B> significa entrada en la consola B.)
El siguiente resultado de
cat t
apareció en la consola A:La siguiente salida de
exec-on-change
apareció en la consola B:El
exec-on-change
guión terminado cuando merm
'dt
.fuente
less
tiene un modo de seguimiento similar atail -f
: simplemente presionaF
cuando lo tengas abierto.fuente
Tengo tres soluciones:
1)
tail -f
es una buena idea2) también tenemos
tailf
que usar3) el tercero es un script bash:
fuente