Terminal de Linux (por ejemplo, Ubuntu), ¿hay algún método para obtener la última línea? Digamos que estoy escribiendo aleatoriamente un td
comando, que no se ha instalado en mi sistema, por lo que recibiré un mensaje como el siguiente. Me gustaría tener un "atajo" para correr sudo apt-get install textdraw
rápidamente.
¿Existe tal herramienta o cómo puedo copiar la última línea al portapapeles sin usar el mouse?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
notd
. la flecha hacia arriba solo me dará eltd
Respuestas:
Si no te importa un poco de obscenidad (no me importa), es posible que desees usar la mierda , una herramienta que hace exactamente lo que pediste.
Bueno, no exactamente, pero resuelve el mismo problema. En lugar de obtener la última línea, intenta hacer coincidir el último comando que escribió.
Los ejemplos que se muestran en el repositorio muestran varios de los escenarios que mencionó.
fuente
La respuesta corta: no, probablemente no tenga un método disponible para hacerlo.
La respuesta larga:
vi
(donde el resultado no es un texto orientado a líneas agradable). bash no hace eso, de todos modos.En la práctica, lo que la gente hace para solucionar esta limitación es usar otros programas para capturar el resultado del comando y editarlo. Pero no resolverá su problema inmediato.
Por ejemplo, uso vi-like-emacs para emitir comandos de shell ad hoc. Si esos no requieren más información, funciona bien ejecutarlos en una ventana , capturar la salida del comando y editar la salida según sea necesario para refinar el comando. Emacs también te permite hacer algo así, así como vim.
fuente
Si recibió ese mensaje en ubuntu después de ejecutar un comando no existente desde bash, su sistema probablemente esté utilizando la
command_not_found_handle
función. Puedes verlo en/etc/bash.bashrc
.Una piratería trivial puede ser una opción: acabo de crear un script llamado
cnfh
:Luego ejecute el comando td usando este script:
Usando Ubuntu 14.04.2 LTS . Espero que eso ayude.
fuente
En tmux v2.4 y en adelante (ya que esto confirma https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) con
send-keys -X
. Puede ser posible en versiones anteriores, con una sintaxis diferente.En
.tmux.conf
:Ahora,
prefix+!
copiará la última línea en la posición actual del cursor.cursor-left
puede omitirse si desea ejecutarlo directamente sin escribir return.Nota : no funcionará si la última línea está vacía o si está envuelta, pero sigue siendo útil en la mayoría de los casos
fuente
Para ejecutar la última línea de salida del comando más reciente, si está dispuesto a volver a ejecutar ese comando (ya que no hizo nada excepto emitir un mensaje de diagnóstico), haga
Paso a paso (capa por capa):
fc
(que podría significar "Arreglar comando") es un comando integrado de shell para acceder al historial de comandos.-ln
l
(minúscula L) - l ist comando (s) anterior (es)n
- no incluyen comandos n umbers1
(uno) - se refiere al comando más recientefc -ln -1
enumera el comando más reciente, sin incluir un número de comando.$(fc -ln -1)
Ejecuta el comando más reciente.$(fc -ln -1) | tail -n 1
ejecuta el comando más reciente y muestra la última línea de su salida. Esta es lasudo apt-get install textdraw
línea, en tu ejemplo.$($(fc -ln -1) | tail -n 1)
ejecuta ese comandoPuedes alias esto:
Te dejo elegir un nombre más corto para el alias.
Notas:
|
,<
,>
,;
,&
, o incluso frases. Si necesita manejar comandos complejos, probablemente pueda hacerlo agregando uneval
, pero esto no es muy recomendable.tail -n 17 | head -n 1
.fc
. Tenga en cuenta quefc -ln -1
es la abreviatura defc -ln -1 -1
. Para recuperar el tercer comando más reciente, usefc -ln -3 -3
.fuente