Ejecute un comando con el argumento del último comando


34

Al ejecutar comandos, a veces quizás necesite ejecutar un comando con el argumento del último comando. ¿Cómo puedes hacer esto?

Por supuesto, exceptuando el uso de las teclas de flecha y Delteclas: ↑←←←... ←→→DelDelDel... Del<new_command>.

Respuestas:


45

Por ejemplo, si ejecuta este comando:

mkdir long_path_here/new_dir

lo más probable es que desee ir al directorio creado recientemente. Puedes hacer esto usando los siguientes "atajos":

  • cd Esc.- escriba cdy luego presione Escseguido de .(no al mismo tiempo). Si el comando anterior no tiene argumentos, obtendrá el comando anterior en sí.
  • cd !*- en este caso obtendrá todos los argumentos del comando anterior. Si el comando anterior no tiene argumentos, no obtendrá nada.
  • cd Alt+ .- escribe cdy después de presionar Alty .(al mismo tiempo). De hecho, al usar esta forma y continuar presionando .(sin soltar Alt), obtendrá el último argumento para cada comando del historial. Si un comando no tiene argumentos, obtendrá el comando en sí.

En general: <command> Esc.o <command> !*o <command> Alt+ ..


wow, usted me salvó cientos de horas habría terminado encima de perder en el próximo par de años
— pranavk

32

Hay algunos accesos directos si desea todos los argumentos del comando anterior, o solo el último argumento.

  • Para todos los argumentos: <command> !*
  • Por el último argumento: <command> !$

Ejemplos:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Si desea un único argumento de una lista de argumentos del comando anterior, puede usar <command> !!:<argNumber>

Ejemplo:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/

2
Sólo se necesita una !en la versión única arg, por ejemplo, !:2. Asumiendo bash por defecto.
— belacqua

3
También puede usar !^en lugar de !:1.
— Paddy Landau

7

Mencionado !*y !$es algo bueno, pero cuando necesite hacer un poco de edición, los atajos de línea de lectura le ayudarán.

Por ejemplo, en lugar de los innumerables ↑←←←... ←→→DelDelDel... Delsolo puede presionar ↑ Ctrl-a(saltar al inicio de la línea) Alt+d(eliminar hasta el final de la palabra)

Para más información man readliney búsqueda Default key bindings.


4

Para tomar el nargumento th de su comando anterior, escriba Alt+ n+ Alt_. Por ejemplo, después de:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

escribir echoseguido Alt2Alt_le dará esto en el siguiente mensaje:

$ echo 2

La "captura de pantalla" después de haber golpeado Alt2es:

(arg: 2) echo

Puede repetir Alt_varias veces para obtener el nargumento th de comandos anteriores en sucesión.

Otra idea útil es definir alias r="fc -s". Entonces, puedes hacer sustituciones de comandos:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
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.