¿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.


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

@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


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.


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.


19

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

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

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

16

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


Tenga en cuenta la palabra clave "último", especialmente si su comando contenía múltiples argumentos.
Cubo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.