¿Cómo puedo recordar el argumento del comando bash anterior?

Respuestas:

562

Puede usar $_o !$para recuperar el último argumento del comando anterior.

También Alt + .se puede utilizar para recuperar el último argumento de cualquiera de los comandos anteriores.

codictorio
fuente
121
Además, si desea un argumento arbitrario, puede usar !!:1, !!:2etc. ( !!:0es el comando anterior mismo). Consulte gnu.org/software/bash/manual/bashref.html#History-Interaction
janmoesen
41
Similar a !$, usas !^para el primer argumento.
Will
13
Ahh ... * nix ... usted es una cosa de belleza ... cada día te quiero más
jx12345
¿Cómo podemos referirnos al penúltimo argumento del comando anterior? por ejemplo, si di echo tiger rabbit, ¿cómo puedo referirme tigeral siguiente comando?
Chan Kim
3
Alt + .no funciona en modo vi. Solo para tu información, para otros que estaban confundidos aquí.
Brian McCutchon el
160

Si el comando anterior tenía dos argumentos, como este

ls a.txt b.txt

y querías el primero, podías escribir

!:1

dando

a.txt

O si quisieras ambos, podrías escribir

!:1-2

dando

a.txt b.txt

Puede extender esto a cualquier número de argumentos, por ejemplo:

!:10-12
Robert Gowland
fuente
@RNA, lo intenté nuevamente para asegurarme de no incluir un error tipográfico, ¿podría proporcionar un poco más de detalles (por ejemplo, línea de comando ubuntu, cygwin para windows? Mensaje de error? Línea anterior?)
Robert Gowland
Estoy usando GNU bash, versión 3.2.51 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. El mensaje de error es-bash: :1-2: bad word specifier
ARN
2
Me sale lo mismo si no hubiera dos argumentos en la línea anterior. P.ej. línea 1 ls a.txtlínea 2ll !:1-2
Robert Gowland
tienes razón. Ese es un estúpido error que cometí. ¡Gracias!
ARN
También para obtener todos los argumentos, !:^-$se puede usar o, por supuesto, un código similar en combinación con números.
816-8055
88

!!:ndonde nes la posición basada en 0 del argumento que desea.

Por ejemplo:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

El !prefijo se usa para acceder a comandos anteriores.

Otros comandos útiles:

  • !$ - último argumento del comando anterior
  • !^ - primer argumento (después del programa / incorporado / script) del comando anterior
  • !! - comando anterior (a menudo pronunciado "bang bang")
  • !n- número de comando ndehistory
  • !pattern - coincidencia de comandos más reciente pattern
  • !!:s/find/replace- último comando, sustituir findconreplace

Más información sobre el historial de comandos

Johntron
fuente
77
En lugar de !!:s/find/replace, tú también puedes ^find^replace.
Big McLargeHuge
Además: !* - todos los argumentos del comando anterior (después del programa / incorporado / script). por ejemplo: ls *.tmp *.cache rm !*
Aphoid
68

En la línea de comando puedes presionar esc- .o alt+.

Se desplaza por el último argumento de sus comandos anteriores.

Antonio Mano
fuente
Siempre he encontrado las teclas y para trabajar también.
Cubo
Las teclas @Bucket van a través de comandos anteriores, mientras que la solución proporcionada por Antonio permite pasar por argumentos anteriores (último argumento de cada comando anterior únicamente)
everyonesdesign
30

Si conoce el número dado en el historial de un comando en particular, puede tomar cualquier argumento en ese comando usando los siguientes términos.

Use el siguiente para tomar el segundo argumento del tercer comando en la historia,

!3:2

Use el siguiente para tomar el tercer argumento del quinto último comando en la historia,

!-5:3

Usando un signo menos, le pide que atraviese desde el último comando del historial.

Madisz
fuente
19

! * ejecuta un nuevo comando con todos los argumentos anteriores.

ls /tmp
cd !*
#you are now in /tmp

fuente
Esto no funcionó para mí en OSX, tuve que usarlo $_.
Mike W
16

Sí, puede usar !$para recuperar el último argumento del comando anterior.

Justin Ethier
fuente
Tenga en cuenta la palabra clave "último", especialmente si su comando contenía múltiples argumentos.
Cubo