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

Radu Rădeanu
fuente

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

Radu Rădeanu
fuente
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/
RandomMooCow
fuente
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.

defhlt
fuente
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
Alok
fuente