Desplazarse dentro de la pantalla, o Pausar salida

383

Utilizo la pantalla para mis tareas de línea de comandos mientras administro los servidores donde trabajo. Por lo general, ejecuto comandos pequeños (principalmente tareas del sistema de archivos) pero a veces ejecuto tareas más extensas (como DBA).

El resultado de esas tareas es importante para mí. Como uso Ubuntu y OS X (ambos Terminal Windows) para mis tareas, pero necesito usar la pantalla, el desplazamiento no está disponible, por lo que cualquier salida larga (piense en una tabla de 500 filas de una selección) es invisible para mí. La rueda del mouse está fuera de discusión.

Cuando digo "el pergamino es invisible para mí, quiero decir esto:

arriba mientras usa la pantalla, en Mac OS X, mientras se desplaza

Estaba pensando en dos opciones:

  1. Pausa (piensa en paginar ) la salida de un determinado comando. Cuando comienza la salida, me deja leer lo que está sucediendo, luego presiono "Enter", luego la salida continúa hasta que no hay nada más que mostrar.

  2. Desplazarse dentro de la pantalla. Pero no sé si esto es posible.

Por supuesto, no sé si esas opciones son realmente posibles . Si es así, ¿cómo puede lograrlos? Otras alternativas serán bien recibidas.

AeroCross
fuente

Respuestas:

526

La pantalla tiene su propio búfer de desplazamiento, ya que es un multiplexor terminal y tiene que lidiar con varios búferes.

Tal vez haya una mejor manera, pero estoy acostumbrado a desplazarme usando el "modo de copia" (que puede usar para copiar texto usando la pantalla, aunque eso también requiere el comando pegar):

  • Presione su combinación de prefijo de pantalla ( C-a/ control+ Apor defecto), luego presione Escape.

  • Mover arriba / abajo con las teclas de flecha ( y ).

  • Cuando haya terminado, presione qo Escapepara volver al final del búfer de desplazamiento.

(Si en lugar de qo Escapepresiona Entero Returny luego mueve el cursor, seleccionará el texto para copiar, y al presionar Entero Returnpor segunda vez lo copiará. Luego puede pegar con C-aseguido de ]).

Por supuesto, siempre puede usar morey less, dos localizadores de uso común, que pueden ser suficientes para algunos comandos.

njsg
fuente
55
Además, al presionar q se sale del modo de copia sin copiar nada (y se presiona un botón menos). Esto podría estar en la explicación vi pero el enlace ahora está roto.
Nathanael Farley
3
También presionar [Esc] también sale del modo de copia.
Sopalajo de Arrierez
77
alguna forma de subir de página?
Sungguk Lim
10
El búfer de desplazamiento parece admitir comandos tipo vi: Cb y Cf para desplazar la página hacia arriba / abajo.
Touko
3
En el modo de copia, mis botones PageUp y PageDown funcionan. La primera presión solo mueve una línea, pero luego se desplaza de forma normal.
Elijah
171

Usar el screenbúfer como lo señala njsg es una buena solución. También puede deshabilitar el búfer de texto alternativo en la información de xterm termcap dentro de la pantalla. Cuando está desactivado, puede usar las barras de desplazamiento (y la rueda del mouse) para desplazarse hacia arriba y hacia abajo.

Agrega esto a tu ~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Puedes leer más discusión aquí .

George M
fuente
1
establezca el límite de desplazamiento al escribir Ctrl + A,:, escriba "scrollback 10000" o cualquier valor numérico que desee
lobi
2
Usando esto, las teclas de acceso rápido típicas de los terminales de Linux (shift + pg arriba / abajo inicio / fin) también funcionan, gracias.
tokland el
55
Este consejo solo me hace reconsiderar el uso de la pantalla ...
Fish Monitor
55
+1 Solución más elegante que aceptada.
Ryan Yoosefi
99
solo le da el resultado que screenle dio desde que lo inició, es decir, volver a conectarlo en otro lugar significa que no puede desplazarse hacia arriba y ver qué sucedió antes. pero aún puede recuperar resultados anteriores utilizando la solución en la respuesta aceptada, luego puede usar la rueda del mouse nuevamente.
Phil
28

Todas estas respuestas abordaron cómo navegar dentro de una sesión de pantalla, pero hay una funcionalidad incorporada en el comando de pantalla para almacenar todo en un archivo a través del -Largumento de acuerdo con el manual que dice:

-L le dice a la pantalla que active el registro de salida automático para las ventanas.

para que puedas hacer:

screen -L -S testscreen

y creará un archivo con el lugar screenlog.#donde #hay un número para esa pantalla a partir de 0.

Esto tiene muchas ventajas y las más importantes para mí son:

  1. Mantener un registro de lo que he hecho ya que puedo guardar el archivo de registro en la carpeta del proyecto para referencia futura.
  2. Puede monitorear el proceso de manera inactiva y pasiva:
    • use tailfpara monitorear el progreso en tiempo real sin estar conectado a la pantalla.
    • use greppara verificar ciertos términos en el registro y generar notificaciones (correo electrónico, ventana emergente, voip, etc.). Esto se puede aplicar en varias pantallas sin que usted las mire activamente.
Mehrad Mahmoudian
fuente
1
No estaba al tanto de la -Lbandera de la pantalla, ¡esto es muy útil! +1
Kredns
1
solo quiero agregar más, screenlog.#se genera en la misma carpeta donde ejecuta el screencomando
Lê Quang Duy
3

He tenido éxito al obtener paginación básica canalizando contenido a more, por ejemplo:

ls -l | more

O, si desea salida de color para casos de uso como resaltado de sintaxis, puede usar

ls -l --color=always | more

Esto da como resultado una salida que puedo buscar fácilmente en una pantalla a la vez. No he intentado la modificación de @ uther ~/.screenrcpero parece preferible como una solución duradera cuando hay un mouse disponible.

Para probar esto, puede ir a este emulador de BusyBox y luego ...

cd ~/bin
ls -l --color=always | more

Use la barra espaciadora para recorrer los resultados del ls -lcomando o use la tecla Intro para moverse por los resultados línea por línea.

Michael Hogan
fuente