Mi respuesta ofrece un comando simple en tres sintaxis diferentes, que funcionan todas por igual, pero una es un poco más corta y más fácil de escribir que la segunda. La tercera variación es un llamado alias, lo que significa que puede asignar al comando un nombre personalizado y llamarlo ejecutándolo sin tener que recordar las cosas complejas.
Preparación:
Primero, instale el paquete xsel
que le permite acceder al portapapeles X desde la terminal:
sudo apt-get install xsel
Variación de comando 1 (corta):
Después de eso, puede escribir la siguiente línea para copiar el comando anterior en el portapapeles:
xsel -ib <<<!!:q
Si desea copiar el segundo último comando, reemplácelo !!
con !-2
, para el tercer último uso, !-3
etc.
Para explicar lo que está ejecutando, aquí un breve desglose del comando:
xsel
es una herramienta de línea de comandos para acceder a los portapapeles X.
Para obtener más información, lea su página de manual en línea o ejecutándose man xsel
.
- El
-i
parámetro le dice xsel
que lea desde el stdin (generalmente esto significa entrada de teclado, pero vamos a redirigir algo aquí)
- El
-b
parámetro especifica usar el portapapeles en lugar de las selecciones "primarias" o "secundarias" de X.
<<<
es una sintaxis especial de Bash llamada "Here String".
Básicamente expande (¡no evalúa!) El argumento (¡solo uno!) Después de él y lo redirige como cadena al stdin (entrada estándar) del comando antes / después del cual se encuentra.
!!:q
se llama "comando de explosión" para la expansión de la historia en bash. Se reemplaza con cualquier línea de comando previamente escrita.
Para obtener más información, lea su página de manual local ejecutando man history
(la página de manual en línea no es útil).
- El
!!
representa la línea de comandos anterior y es sinónimo de !-1
.
Obviamente !-2
significa entonces la segunda última línea de comando. No olvide el signo menos -
; de lo contrario, devolverá el segundo comando (tercero / ...) que haya escrito.
- Los
:q
modifica el comando Bang y le indica a Bash para encerrar la sustitución entre comillas simples ( '
) para evitar una mayor expansión de la cáscara.
Variación de comando 2 (un poco más larga):
echo !!:q | xsel -ib
echo
tiene el simple trabajo de imprimir todos sus argumentos en la salida estándar del terminal.
!!:q
se llama "comando de explosión" para la expansión de la historia en bash. Se reemplaza con cualquier línea de comando escrita anteriormente.
- El
!!
representa la línea de comandos anterior y es sinónimo de !-1
. Obviamente !-2
significa entonces la segunda última línea de comando. No olvide el signo menos -
; de lo contrario, devolverá el segundo comando (tercero / ...) que haya escrito.
- Los
:q
modifica el comando Bang y le indica a Bash para encerrar la sustitución entre comillas simples ( '
) para evitar una mayor expansión de la cáscara.
|
Es una pipa. Redirige la salida del terminal ("stdout") del comando anterior a la entrada del terminal ("stdin") del comando posterior.
xsel
es una herramienta de línea de comandos para acceder a los portapapeles X.
Para obtener más información, lea su página de manual en línea o ejecutándose man xsel
.
- El
-i
parámetro le dice xsel
que lea desde el stdin (generalmente esto significa entrada de teclado, pero vamos a redirigir algo aquí)
- El
-b
parámetro especifica usar el portapapeles en lugar de las selecciones "primarias" o "secundarias" de X.
Variación de comando 3 (alias):
Un alias bash es genial si no quieres recordar comandos largos o complicados que usas con frecuencia. Puede asignar este comando a un nombre de alias simple, que puede ejecutar en lugar del comando largo para lograr el mismo.
Desafortunadamente, dado que los comandos de explosión son una característica especial de Bash y se expanden antes de que se resuelvan los alias, no puede simplemente alias una de las variaciones anteriores porque la !!
parte no funcionará. Sin embargo, hay una solución alternativa.
Para configurar el alias, ejecute la siguiente línea en su terminal. Tenga en cuenta que puede elegir cualquier nombre de variable Bash válido en lugar de copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Sin embargo, esto solo es persistente para su sesión de Bash actual, lo que significa que el alias desaparecerá después de cerrar la ventana de terminal. Puede hacerlo persistente en cada una de sus sesiones de Bash agregando esta línea arriba al final de su ~/.bashrc
archivo, o a su ~/.bash_aliases
archivo si tiene una.
Una vez más, un breve desglose de la línea:
alias name='command'
es la sintaxis para establecer un alias en Bash. El command
se ejecutará siempre que ejecute a name
partir de ahora.
history -p \!\!
envía la línea de comando ejecutada previamente a stdout (salida estándar). Sin el -p
interruptor, no solo imprimiría, sino que también volvería a ejecutar el comando.
Tenga en cuenta que debemos escapar del flequillo ( !
) con barras invertidas ( \
), porque de lo contrario bash los expandiría cuando intentemos establecer el alias, lo que no tiene sentido ya que deben estar en el alias tal como están.
Una vez más, también puede especificar el comando [n] -th reciente reemplazando el segundo golpe con -n
, p \!-2
. Ej .
|
Es una pipa. Redirige la salida estándar ("stdout") del comando anterior al estándar de terminal ("stdin") del comando posterior.
xsel
es una herramienta de línea de comandos para acceder a los portapapeles X.
Para obtener más información, lea su página de manual en línea o ejecutándose man xsel
.
- El
-i
parámetro le dice xsel
que lea desde el stdin (generalmente esto significa entrada de teclado, pero vamos a redirigir algo aquí)
- El
-b
parámetro especifica usar el portapapeles en lugar de las selecciones "primarias" o "secundarias" de X.
<<<"!!" xsel -ib