¿Puedo guardar la salida de un comando de terminal anterior usando solo el teclado?


12

Acabo de pasar las últimas dos horas ejecutando un ddcomando (o imagino un escenario similar "difícil de rehacer") desde un CD en vivo sin una GUI; todo lo que tengo es mi confiable CTRL+ALT+F#terminal Bash "multi-window" ( ).

Por desgracia, durante el comando ddarrojó varios mensajes de error desagradables y un poco más de información que me gustaría conservar. Tengo una unidad USB conectada en la que puedo escribir datos, pero ¿cómo puedo guardar la salida anterior como un archivo de texto después de que el comando ya se haya ejecutado?

Si este hubiera sido un emulador de terminal dentro de una buena GUI, simplemente habría usado mi mouse para seleccionar el texto, copiarlo y pegarlo en un documento. Y si hubiera sabido que el comando habría producido errores, para empezar, lo habría canalizado a un archivo, pero lamentablemente, la salida adicional fue una sorpresa.

¿Cómo guardo la salida de texto de mi comando anterior en un archivo sin volver a ejecutar el comando? ¿Es esto posible?


He estado buscando formas de seleccionar texto en la pantalla, pero hasta ahora solo encuentro formas de hacerlo usando el texto que ingresó en el mensaje.
IQAndreas

¿Has intentado usar la redirección de salida?
eyoung100

2
@ eyoung100 ¿Esa es otra palabra para "tubería"? Al igual que en dd if=/dev/sda of=/backups/sda.img > result.txt. Si es así, el problema es que ya ejecuté el ddcomando . A toda costa, quiero evitar ejecutar el comando nuevamente, lo que en algunas situaciones es imposible.
IQAndreas

2
Asumiendo que esto es Linux: instale gpm . (Comience si es necesario, por ejemplo service start gpm). Barra una región mientras mantiene presionado el botón izquierdo del mouse. Escriba cat > outputfiley haga clic con el botón derecho del mouse para pegar la región que acaba de seleccionar.
Mark Plotnick

1
Si el objetivo es únicamente "mantener ... [la] información", un último recurso es tomar una cámara y tomar una fotografía de la pantalla. (Y, teóricamente, podría ejecutar OCR en eso.)
Scott

Respuestas:


15

Un kernel de Linux debería almacenar un registro en pantalla para sus vts en el /dev/vcsa*[ttynum]dispositivo correspondiente .

Es por eso que lo siguiente funciona:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... que imprime ...

hey       

El /dev/vcsa[ttynum]dispositivo correspondiente almacenará una versión codificada del texto formateado en la pantalla, mientras /dev/vcs[ttynum]que será un volcado simple. Los vcsa[ttynum]dispositivos codificarán un par de bytes que describen cada carácter en pantalla y sus atributos, así como una cadena en la cabecera de cada página lógica que indica las líneas de tty referenciadas , el recuento de columnas .

Como señala @kasperd, me equivoqué antes al suponer que el \aBEL estaba codificado entre cada carácter, cuando de hecho: la combinación de colores predeterminada coincide con el carácter de la campana.

Para sus propósitos, usar /dev/vcs[ttynum]es probablemente el más fácil Aquí hay un lvistazo a las diferencias:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

...huellas dactilares...

hey       $

...y...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

...huellas dactilares...

0\200\000\004h\ae\ay\a$

1
vcsano pone el mismo carácter entre todos los caracteres. Te da pares de bytes que te dicen qué personaje está en la pantalla y qué color tiene. La combinación de colores predeterminada coincide con el carácter de campana.
kasperd

@kasperd: gracias. ¿Es mejor?
mikeserv

Eso es mejor. 👍
kasperd

2

Vaya a (/ inicie sesión) en otra terminal y ejecute sudo screendump N > screenoutput.txt, donde Nestá el número de la terminal que desea.

Sin retraso, me temo. Si esas consolas virtuales conservan una, nunca la he visto. Pero te da todo lo que puedes ver en esa terminal.


si funciona, probablemente sea porque lo toma /dev/vcsa*[1-9]*- (que es para lo que supongo que son los permisos de superusuario) . Las consolas de Linux también han soportado una acumulación de pedidos para la mayoría de las series 3. *, creo. No estoy seguro de cómo se puede agarrar (en lugar de usar los /dev/vcsa*[1-9]*dispositivos), pero tal vez hay una manera.
mikeserv

Es mejor no cambiar a una consola diferente, ya que el cambio borra el trabajo atrasado, reteniendo solo lo que está actualmente visible en la pantalla.
Gilles 'SO- deja de ser malvado'

@mikeserv Sí. Bueno, la página del manual parece decir que usa ambos /dev/vcs$i y /dev/vcsa$i. Sin embargo, da un resultado legible. ;-)
El Sidhekin

@Gilles Ah, ¿entonces hay un retraso? Pero screendumpno llega a eso, incluso si me quedo en la misma consola.
El Sidhekin

1
Puede ver el desplazamiento hacia atrás escribiendo Shift-PageUp una o más veces. No conozco una manera de hacer que el texto en el desplazamiento hacia atrás no sea usar el mouse a través de gpm.
Mark Plotnick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.