¿Puede seguir menos (presionando F) una entrada canalizada (de manera similar a un archivo)? Para un archivo en el que se está escribiendo, el comando
less <file>
seguirá el archivo al presionar F.
Pero si tengo un comando que canaliza la salida directamente en menos, como este
command | less
presionar F no hará nada.
Entonces, ¿parece que las tuberías no se pueden seguir como los archivos? ¿O tal vez tiene que ver con el comando que también escribe en STDERR? El efecto que estoy tratando de lograr es ver siempre la última salida del comando: ¡al igual que mantener presionado PageDown!
Una observación relacionada es válida para G (ir al final): cuando se canaliza directamente a menos, no funcionará.
Respuestas:
Al pulsar Fo Gmarcas
less
intentar alcanzar EOF entrada. Si la entrada es una tubería, seless
cuelga hasta que la tubería se cierra del otro lado (y no "no hace nada").Esto puede solucionarse guardando el resultado del comando en un archivo temporal en segundo plano y luego usándolo como entrada para
less
:No hay opción para hacer esto
less
solo; Sin embargo, admito que sería útil.fuente
less
cuelga hasta que la tubería se cierra del otro lado . Esa es una especie de declaración engañosa. Lo que sucede es que hay menos llamadasread
en modo de bloqueo, esperando nuevos datos o el cierre de la tubería.less
no solo se realiza una lectura de bloqueo, sino que se realiza en un bucle esperando EOF. Y un EOF en una tubería ocurre solo si su otro lado está cerrado.less
actualizaría la pantalla en ese bucle, no habría problema. Bloquear la lectura tiene poco que ver con este problema.less
no podría actualizar la pantalla, si no hay datos; cuando aparezcan algunos datos, el bloqueo de lectura los devolverá yless
podría actualizar la pantalla sin un hilo separadoSí, comenzando con la versión 474. Sin embargo, aún no se menciona en las notas de la versión de ninguna versión, ya que actualmente hay un problema pendiente con esta característica. A continuación se muestra un comentario del responsable de less - Mark Nudelman:
Con respecto al comando F en tuberías, esto también se corrige en less-474. En lugar de buscar EOF, el comando F busca el final de la entrada almacenada en el búfer y comienza a leer allí. Sin embargo, no es realmente utilizable porque cuando presiona CTRL-C para detener el comando F, mata el proceso que produce la salida. No estoy seguro de cómo solucionar eso.
Hasta que este problema se solucione en menos, uno puede solucionarlo utilizando las funciones de shell. Vea mi respuesta a ¿Hay alguna forma de salir del modo de seguimiento "menos" sin detener otros procesos en la tubería? pregunta para más detalles.
Como referencia, el problema con F que no funciona con tuberías tiene el número de referencia 300 en la lista de errores conocidos y se titula El comando F no funciona en la entrada canalizada.
Funciona a partir de la versión 466. Citando las notas de la versión de esta versión:
fuente
Desde la página de menos man
así que esto debería funcionar, y realmente funciona para mí.
fuente