Copiar el búfer de desplazamiento de la pantalla GNU a un archivo (copia impresa extendida)

188

¿Cómo copio fácilmente el búfer de desplazamiento de pantalla GNU a un archivo? Es decir, ¿una versión más poderosa del comando 'hardcopy'?

En la pantalla GNU, puedo usar " Ctrl+ A Esc" para ingresar al búfer de desplazamiento. Luego podría marcar todo el búfer y usar " Ctrl+ A Ctrl+ ]" para pegarlo en un búfer de Emacs , guardándolo así en un archivo.

Sin embargo, esto es tedioso. ¿Existe un comando de pantalla que simplemente copiará el búfer de desplazamiento hacia atrás a un archivo, como lo hace 'copia impresa' para la parte visible de la pantalla?

Peter Mortensen
fuente

Respuestas:

284

Para escribir todo el contenido del búfer de desplazamiento hacia atrás en un archivo, escriba

Ctrl+ Ay : para llegar al modo de comando, entonces

hardcopy -h <filename>

En versiones anteriores de screen, si solo lo hace hardcopy -h, simplemente escribe en el archivo -h. Esto se corrigió en la versión 4.2.0, por lo que hardcopy -hescribe hardcopy.Ndónde Nestá el número de ventana actual.

Cuenta
fuente
1
Tenga en cuenta que el archivo se guarda en el directorio de inicio, al menos para mí. Gracias por la respuesta, por cierto!
Ritesh
2
@allrite: se guarda en $ PWD (si no proporciona fullpath), no hay un comportamiento especial.
Pushpendre
9
Sí, pero se guarda en la pantalla $ PWD donde comenzó la pantalla. No en la sesión de pantalla $ PWD.
seumasmac
77
Tenga en cuenta que si tiene un búfer de retroceso largo y no contiene mucho, el archivo guardado puede aparecer vacío porque las primeras decenas o cientos de líneas están en blanco y el contenido está al final.
Terry Brown
3
Una nota más sobre la ubicación donde se guarda la copia impresa: si se cd a un directorio y luego se usa screen -rpara volver a conectarse a una sesión existente, la copia impresa no se guarda en el directorio activo dentro de la pantalla o en el que estaba antes de usar screen -r. Creo que se guarda en el directorio en el que estabas cuando comenzaste la sesión de pantalla. Puede cambiar esto con el comando hardcopydir .
Matthias Fripp
25

Presione Ctrl+ A : bufferfile /tmp/somefile.txt ENTER , y luego Ctrl+A >

Esto escribirá el contenido actual del búfer en el archivo nombrado.

Roshan
fuente
Intenté esto, y el "ctrl-a>" dice "No pasó nada". El primer paso decía "Bufferfile ahora es '/tmp/foo.txt'", pero parece que ni siquiera crea ese archivo.
1
¿Estás seguro de que has copiado algo en el búfer de la pantalla usando Ctrl + A [? Parece que su búfer puede estar vacío: no copiará todo el búfer de desplazamiento hacia atrás, solo la parte que seleccionó usando Ctrl + A [
Roshan
2
Ah, estaba buscando un acceso directo para copiar todo el búfer sin usar ctrl-a [
12

TL; DR: ^A:writebuf <filename>

El OP parece querer una forma de usar la porción seleccionada del búfer que obtienes cuando haces un ^ A [, seleccionando texto usando el espacio como inicio y fin, y luego en lugar de usar ^ A] para pegar, guarda la porción seleccionada resultante del búfer a un archivo.

Esto funcionó:

^A:writebuf <filename>

Nota: una 'f' en writebuf

Kevin Mullet
fuente
1
No no. OP quiere guardar TODO el búfer, no solo la parte seleccionada. - OP
2
Ratas! Me lo perdí tanto
Kevin Mullet
44
Esta publicación sigue siendo útil. Buen trabajo.
Justin E
1
Descubrí que para que esto funcionara en la versión de pantalla de MacOSX tenía que usar una ruta de eliminación (es decir: /Users/user1/path/to/file.txt)
jhrf
6

Intenta hardcopy -hincluir todo el búfer.

Jorge Gutiérrez
fuente
2
Esto solo hace una copia impresa en el archivo ~ / -h
2
@barrycarter: Eso puede haber cambiado en versiones más recientes. A partir de la pantalla 4.03.01, hardcopy -hescribe en hardcopy.N, donde Nestá el número de ventana actual.
Keith Thompson
4

Esto funcionó para mí:

Ingrese al modo de edición ( ~) y escriba:

:hardcopy -h buff_file

Creó un archivo enorme, de los cuales el 98% estaba vacío, pero mis registros estaban completamente presentes en el 2% restante.

freeninza
fuente
-2

Ctrl+ A, :y emita el comando 'iniciar sesión'.

O configúrelo como predeterminado en su archivo .screenrc como 'deflog on'.

brianray
fuente
2
Creo que esto solo comienza a registrar todo después de ejecutar ese comando. No quiero registrar todo (demasiado detallado). Solo quiero capturar el búfer de desplazamiento hacia atrás como un archivo.
-3

Do Ctrl+ A, H.

Eso guarda la pantalla actual en un archivo de copia impresa, por ejemplo, hardcopy.0 para la pantalla 0. Parece ser una forma más rápida que ir Ctrl+ A, :y escribir el comando de copia impresa .

Jeff
fuente
3
Desafortunadamente, eso solo guarda la parte VISIBLE de la pantalla, no el búfer de desplazamiento hacia atrás.