Al disparar comandos en CLI, quiero copiar el comando que acabo de disparar o cualquier cosa que escribí en la terminal y pegarlo en otro lugar sin usar el mouse.
Como en la siguiente imagen, quiero copiar el comando de actualización (total o parcialmente) sin usar el mouse y pegarlo en alguna parte.
terminal
gnome-terminal
copy-paste
prayagupd
fuente
fuente
Respuestas:
Se puede utilizar
screen(1)
dentro de su emulador de terminal de elección (xterm
,gnome-terminal
, ...).La funcionalidad que necesita está incorporada
screen
. Debe familiarizarse con la forma en que funciona:Puede "copiar" el comando y "pegar" en otro terminal.
screen
es divertido y una vez que comiences a usarlo, te preguntarás cómo es posible que no lo hayas usado en absoluto.fuente
screen
comando, así que lo instalé en gnome-terminal y comencéscreen
en una terminal. Pero no pudo comenzar a partir de entonces. Además, no entendí lo que quieres decir con pantalla incorporada.man screen
. También, escribí 'incorporado en la pantalla', es decir, el copiar / pegar funcionalidad está presente enscreen
por diseño .space
tecla para seleccionar el área deseada. Debe usarY
para copiar toda la línea o área deseable. La pantalla esvi
amigable con los movimientos.AltGr
clave? TengoAlt
screen
herramienta no funciona se ha explicado aquí. Y no parece dar una respuesta a la pregunta.Además de las respuestas ya proporcionadas, podría considerar pasar a un emulador de terminal más flexible.
Si estaba preparado para cambiar terminales a rxvt-unicode , podría usar una herramienta como urxvt-perls : una colección de scripts que proporcionan la siguiente funcionalidad de teclado en ese emulador de terminal:
Simplemente instale el paquete y luego agregue algunas líneas a su
~/.Xresources
, y luego puede desconectar el roedor para siempre.fuente
Puedes hacer esto usando un programa como
xclip
:Una vez que lo haya instalado, puede usarlo para conectarse a su portapapeles X. Desafortunadamente, esto no funcionará en su
mysql
entorno (tiene su propio búfer para líneas copiadas), pero lo hará si desea ejecutar un comando 'normal'. Por ejemplo :Escriba CtrlApara ir al comienzo de la línea, encierre el comando entre comillas y luego repítalo:
Ahora tiene "Esta es una línea de comando larga" en su portapapeles de clic central.
Si desea pegar sin usar un mouse, dependerá de dónde esté pegando. Puede pegar en otro terminal ejecutando:
Puede pegar en el mismo terminal, simplemente matando (cortando) el comando con CtrlKy luego pegando con CtrlY.
También puede guardar comandos en terminales utilizando el historial de bash. Agregue esta línea a su
~/.bashrc
:PROMPT_COMMAND
es una variable bash especial. Si se establece, el valor se ejecuta como un comando antes de emitir una nueva solicitud.history -a
escribirá el historial de la sesión actual en el archivo de historial yhistory -r
volverá a cargar ese archivo. Esto significa que cada comando que ejecute se escribirá inmediatamente en el archivo de historial.Ahora, cuando ejecuta una línea de comando larga, puede cambiar a otra terminal y presionar regresar (solo para ejecutar
$PROMT_COMMAND
, alternativamente, abrir una nueva ventana de terminal) y estará accesible para el historial de esta terminal. Si ahora golpeas Uppuedes ejecutarlo en la nueva terminal.fuente
$ xclip -o
no es lo que quiero porque solo imprime lo que hicexclipe
. Pero +1 paraCtrl+A
seguido porCtrl+K
yCtrl+Y
para cortar y pegar al menos en la misma terminal.@evilsoup ha sugerido una buena solución, pero se rompe a menudo.
Una solución rápida
Aquí hay una solución que nunca se rompe .
Simplemente ejecute este comando y copiará el comando que acaba de ejecutar en el portapapeles.
Básicamente, lo que hace es que imprime su historial de comandos y toma el segundo último comando y lo alimenta al portapapeles (el último comando es este mismo, por lo que selecciona el segundo último comando).
Una función personalizada
Desarrollando en la solución rápida, aquí hay una pequeña función que escribí que es bastante inteligente y copiará el último comando utilizado. También puede proporcionar argumentos numéricos para copiar el último enésimo comando. Por ejemplo, para copiar el segundo último comando proporcionar
2
como argumentoCopie y pegue la función anterior en su
~/.bashrc
archivo. Tenga en cuenta que si coloca esto en un archivo de script bash separado y ejecuta el script, no funcionaría ya que el comando de historial no podría acceder a su historial en ese caso.Finalmente, ejecútalo como:
Además, una característica interesante añadida a esta función es que se elimina del historial después de ejecutarse. Esto es útil porque el índice "hacia atrás" de los comandos no cambia.
fuente
screen
? La segunda respuesta mejor calificada también había asumidobash
ylinux
. Además, suponerbash
que no es un gran problema porque el script aún funcionaría para encontrar en zsh o en la mayoría de los otros shells.Este comando utiliza la expansión del historial de bash (se
!!
expande en la última línea que ingresó en la terminal). Probablemente tendrá que instalar unoxclip
oxsel
.Esto colocará su último comando en el portapapeles Ctrl+ v, por lo que podrá pegarlo en cualquier programa GUI (o con Ctrl+ Shift+ ven la mayoría de los emuladores de terminal, o con
"+p
in vim).Esto se romperá para algunas líneas que contienen comillas dobles, por ejemplo:
Sin embargo, funcionará para el comando que dio como ejemplo; solo deberías tener problemas si las comillas dobles escapan
;
&
&&
|
||
y así sucesivamente.fuente
echo !!
y funcionará sin problemas (excepto en el caso improbable de que tu comando anterior comenzara con-n
o con-e
las pocas otras opciones queecho
toma).Tal vez no sea la solución más conveniente, pero la uso y, por lo tanto, puede ser útil para otros, ya que no requiere ninguna instalación suave adicional.
Necesita crear un archivo temporal en cualquier directorio conveniente
Transfiera la dirección o texto requerido a ese archivo. Para transferir dirección puede usar
Para obtener la dirección del archivo, use el comando
Para copiar y pegar comandos, este sistema funcionará, por supuesto. Espero que haya sido útil
fuente