Usar texto de la salida de comandos anteriores

16

EDITAR Abril de 2015: si tiene esta misma pregunta, le recomiendo también consultar http://xiki.org/


Sé que no es así como funcionan los terminales, pero a menudo me encuentro deseando que haya una manera fácil de usar el texto (copiarlo, modificarlo, etc.) que ya está en el historial de mi ventana de terminal de alguna salida de comando anterior.

Lo he imaginado así:

Estoy en mi bash shell a punto de ingresar un comando y me doy cuenta de que necesito escribir algo que ya está en la pantalla unas líneas más arriba. Puedo alcanzar el mouse y seleccionarlo, pero odio eso. Lo que realmente deseo en este momento es que toda mi terminal se haya convertido en un búfer gigante de Vim, todo: las indicaciones, los comandos que he escrito y la salida de esos comandos. Todo. Y luego podría saltar algunas líneas hacia arriba, tal vez editar un poco y tirar un poco de texto. Luego, regrese al modo de shell bash y pegue lo que haya tirado en la línea de comando actual.

Sé que hay algunas opciones:

  • Naturalmente, canalice el texto que necesito directamente de la salida de algún comando a un archivo, o directamente al siguiente comando. Pero para eso debe planificar por adelantado o volver a ejecutar el comando desde su historial (suponiendo que la salida no cambie entre invocaciones).

  • Para alcanzar el mouse y seleccionar el texto a copiar. Cojo, molesto, desearía no haber hecho eso (este no es el sitio de intercambio de la GUI, ¿verdad? =)

  • Para usar la opción "Exportar texto como ..." de mi aplicación de terminal (Mac OS X) y guardar el texto del terminal en un archivo. Luego abra el archivo y trabaje con él. Casi, pero ¿por qué seguir el paso de guardar en un archivo en el disco?

Entonces la pregunta es: ¿Qué haces en esta situación? ¿Hay algún truco, herramienta, función de shell que pueda ser útil en este escenario? ¿Te resignas a usar el mouse o reescribes lo que necesites?

Puede ser que el problema sea que no estoy haciendo las cosas 'a la manera de Unix', pero vamos, esto es 2010 y no puedo copiar fácilmente algunas líneas de texto lejos de mi cursor.

Sergio Acosta
fuente
1
Consulte también ¿Cómo reutilizo la última salida de la línea de comando? .
Gilles 'SO- deja de ser malvado'
stackoverflow.com/questions/5955577/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

4

Puede usar el script (use -f para asegurarse de que se vacíe todo el tiempo) y puede tener toda la salida en un archivo.

Utilice un multiplexor de terminal (pantalla, tmux, etc.). Por ejemplo, para la pantalla http://web.mit.edu/gnu/doc/html/screen_11.html#

Comando: copiar Ingrese al modo copia / desplazamiento hacia atrás. Esto le permite copiar texto de la ventana actual y su historial en el búfer de pegado. En este modo, está activo un editor de pantalla completa tipo vi, con controles como se describe a continuación.

Otros multiplexores terminales seguramente tienen capacidades más avanzadas.

nc3b
fuente
Okay. Acabo de enterarme de que un 'Terminal Multiplexor' es probablemente lo que necesito. Gracias. Además, gracias por la sugerencia de comando 'script'.
Sergio Acosta el
5

En tmux (un multiplexor de terminal) puede presionar Ctrl + A- [para cambiar al modo de búfer Vi donde puede navegar por la pantalla, desplazar el búfer hacia adelante y hacia atrás, copiar texto, etc. El atajo predeterminado es en realidad Ctrl + B- [pero eso obviamente estaba destinado a ser reconfigurado. Además, el modo de búfer predeterminado es Emacs, pero puede configurarlo para que sea Vi.

Echa un vistazo a tmux, realmente es un gran multiplexor de terminales moderno. Además de trabajar con el búfer, puede dividir la pantalla en múltiples ventanas, conectarse a la misma sesión desde múltiples terminales, etc. Para mayor comodidad, incluso puede convertirlo en su shell de inicio de sesión si le dice cuál es su shell real.

En OpenBSD, tmux incluso se hizo parte del sistema base.

Vea la página de manual de tmux para más detalles. Ver también capturas de pantalla en http://tmux.sourceforge.net/

zvolkov
fuente
¡tmux es el más genial!
Gabe.
4

En emacs, Mx shell maneja la edición de la salida anterior. Puede copiar y pegar fácilmente la salida de comandos anteriores, o cualquier parte de su búfer, como un búfer normal. Estoy bastante seguro de que debería haber un equivalente vim.

elmarco
fuente
1
Eso está muy cerca de lo que quiero, pero ya necesito estar en Emacs o Vim. +1
Sergio Acosta
Sí, podría ser su término predeterminado + shell. :) Entonces usarías las teclas de navegación de texto habituales allí como mínimo. Si aprendió más teclas especiales, puede acceder a las siguientes características de Emacseshell .
imz - Ivan Zakharyaschev
1

Como se mencionó aquí, el Emacs ' eshellpodría ser su término predeterminado + shell. :) Entonces usarías las teclas de navegación de texto habituales allí como mínimo. Si aprendió más teclas especiales, eshellpuede acceder a las siguientes características de Emacs :

imz - Ivan Zakharyaschev
fuente
1

Intente usar vim como su CLI? Simplemente seleccione la salida desde unas pocas líneas hacia arriba y canalice a través de:

Stephen M. Webb
fuente
Lo siento, no te sigo. ¿Puedes dar más detalles, por favor?
roaima