menos con funcionalidad similar a "archivo de actualización"

menos con funcionalidad similar a "archivo de actualización"

Quiero ver un archivo que se sobrescribe cada 5 minutos con less. ¿Cómo puedo lessseguir el nuevo descriptor de archivo en lugar de mantener mostrado el anterior? watch "cat file"no lo hará porque el archivo es demasiado largo para caber en una ventana de terminal.

Respuesta1

Puede obtener este efecto emitiendo el Fcomando ( Shift+F) mientras visualiza el archivo en formato less. Para dejar de seguir y volver a buscar, presioneCtrl+C

Dado que su archivo solo cambia cada 5 minutos, también puede usar tail -fy especificar un tiempo de suspensión más largo -s(el valor predeterminado es 1 segundo). Por ejemplo,

tail -f -s 60 myfile

comprueba myfilela salida cada 60 segundos.

EDITAR: Debido a una pregunta engañosa, la respuesta anterior no fue satisfactoria. Sigue el segundo intento:

Para volver a abrir el mismo archivo lesscada 5 minutos, intente esto:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Esto generará un subshell que pone en segundo plano otro proceso de shell al que se le indica que finalice su proceso principal después de 5 minutos. Luego abre el archivo con less. Cuando el comando de shell en segundo plano mata el subshell padre, mata a todos sus hijos, incluido el comando "menos". Luego, el bucle inicia el proceso nuevamente.

La única manera fácil que conozco de eliminar esto es eliminar el terminal en el que se encuentra tu shell original. Si eso es inaceptable, puedes usar el truco "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Para dejar de hacerlo stuff, rmel killfile en otro shell.

Respuesta2

Puedes hacer algo similar en vim.

Inicie una sesión de servidor de vim:

vim -R --servername refresh_session

Luego, en otra consola, supervise el archivo en busca de actualizaciones y dígale a la sesión de vim que vuelva a cargar el archivo tan pronto como se actualice:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Algunas trampas.

  • Por supuesto, esto no funcionará si vimno está compilado con la clientserverfunción.
  • inoifywaitdejará de funcionar cuando se elimine el archivo. Así que espero que su archivo se sobrescriba. Por supuesto, también es posible solucionar este problema.

Y si desea tener una lessexperiencia más parecida, puede usar las lessmacros para obtener sus lesscombinaciones de teclas vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

Respuesta3

Puedes probar este comando: tail -f file

Respuesta4

Encontré un programa antiguo, pero muy bueno, "menos" (un "buscapersonas"). Tiene un comando "R" que actualiza el archivo.

Se llama"lv", Puedes instalarlo en Ubuntu usando:

sudo apt install lv

Sin embargo, parece no tener función de recarga automática.

información relacionada