copiar el último comando en la terminal

21

Puedo ver el último comando en la terminal presionando up arrow como en el siguiente ejemplo:

Escribí cd / :

Makss-Mac:~ maks$ cd /

... presioné enter , el comando cd / se ejecutó y ahora puedo presionar up arrow y ver el comando cd / otra vez:

Makss-Mac:/ maks$ cd /

No solo quiero ver el último comando, sino también copiarlo al portapapeles.

Tal vez exista un método abreviado que no solo muestre el último comando en el terminal (como up arrow do) sino que al mismo tiempo lo copie en el portapapeles.

O quizás haya un atajo para seleccionar todo desde la línea de terminal actual. Y así podré copiar el último comando (después de presionar up arrow ) presionando super+c . Por supuesto que puedo seleccionarlo con el mouse. Pero cuando los comandos son 10 veces más largos que cd / , puede llevar demasiado tiempo, especialmente si lo haces cada 30 segundos.

O tal vez hay forma de escribir un complemento para la Terminal

    
pregunta Maxim Yefremov 12.11.2013 - 19:36

4 respuestas

14

Ponga esto en su ~/.bashrc ~/.bash_profile o donde quiera que le guste:

alias copyLastCmd='fc -ln -1 | awk '{$1=$1}1' | pbcopy '

Después de abrir una nueva ventana (o ejecutar source ~/.bash_profile ), deberías poder ejecutar copyLastCmd y tener el comando en el portapapeles.

Para explicar lo que está pasando: básicamente estás usando el "comando de reparación" ( fc ) para obtener el último comando, elimina tanto el espacio en blanco inicial como el final para un mejor formato con awk y luego cópialo en tu Mac cartón con pbcopy .

EDIT:

Ahora que sabemos que desea copiar para pegar en otra pestaña de terminal, hay otra opción: Agrega estas líneas a tu ~/.bashrc ~/.bash_profile o donde quieras:

shopt -s histappend
PROMPT_COMMAND='$PROMPT_COMMAND; history -a; history -n'

Luego, una vez que haya abierto algunas pestañas nuevas (llamémoslas "pestaña A" y "pestaña B"):

  1. Ejecuta cualquier comando en la pestaña A
  2. Cambie a la pestaña B, presione Intro en una línea vacía , lo que le brinda una nueva línea "nueva" (y, por lo tanto, vuelve a evaluar el historial)
  3. use la flecha hacia arriba una vez y debería tener el comando que acaba de ingresar en la pestaña A.

EDIT 2: He reemplazado el uso de sed con awk en la respuesta original anterior, para cuidar tanto los espacios en blanco iniciales como los finales.

    
respondido por el Asmus 12.11.2013 - 20:17
4

Puedes configurar tu historial para ignorar los comandos que comienzan con un espacio:

export HISTIGNORE=' *'

Y luego ejecute el siguiente comando para pasar el último comando al portapapeles (asegúrese de tener un espacio al principio):

history 1 | cut -d " " -f 4- | pbcopy

Probablemente querrás guardar el comando como un alias para que sea más fácil de recordar.

    
respondido por el kidbrax 12.11.2013 - 20:19
4

Aquí hay otra toma basada en la respuesta de @Asmus. Para hacer que su alias funcionara en mi script bash, tuve que usar un poco de comillas, ya que las comillas simples no funcionan en un alias de comillas simples sin algunas comillas adicionales:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' | pbcopy'

El '\'' básicamente cerrará la cotización actual, luego agregará una cotización escapada y luego abrirá la cotización real nuevamente.

La versión anterior copiará el último comando en su portapapeles, y una vez que lo pegue, se ejecutará de inmediato, ya que tendrá una nueva línea al final.

Para deshacerte de la nueva línea al final, para que puedas editar el comando antes de ejecutarlo, puedes hacer lo siguiente:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' ORS='\'''\'' | pbcopy'

El ORS='' (que no tiene comillas) eliminará el carácter de nueva línea final, por lo que puede editar el texto pegado antes de ejecutarlo.

    
respondido por el nwinkler 14.11.2013 - 12:05
1

Esto usará expansión del historial para obtener la última Comanda y hazlo eco. Puede canalizar a pbcopy para guardar el último comando en su portapapeles.

> echo !! | pbcopy

Si desea un comando de su historial que no sea el último , puede ejecutar:

> history

Y haga referencia al número de comando deseado como:

> echo !5 | pbcopy
    
respondido por el Sam Berry 07.12.2018 - 15:45

Lea otras preguntas en las etiquetas