teclas teclado para control combinacion comandos comando atajos abrir abortar bash

teclado - Bash atajo para obtener el padre del último parámetro utilizado



combinacion de teclas para linux (6)

En mi flujo de trabajo lo hago muy habitualmente:

cat this/very/long/filename.txt cd !$ bash: cd: this/very/long/filename.txt: Not a directory

Lo que es de esperar :(

Y ahora recupero el último comando, elimino manualmente la parte del archivo y repito el cd , que ahora funciona. Eso es demasiado escribir !

Sería muy bueno si hubiera un atajo de bash como:

cd !§

Lo que podría darme el padre del último parámetro utilizado. ¡Lo sé no existe, ¡ojalá lo hubiera! ¿Hay algo que pueda satisfacer esto?


A partir de la respuesta presentada por otras personas, el flujo de trabajo ideal es escribir cd !$:h después del comando cat this/very/long/filename.txt . Esta respuesta, cd !$:h , aún funcionará después de cd !$ , Pero, una vez que haya cometido ese error, puede usar el aún más corto !:h , que repite el último comando ( cd this/very/long/filename.txt ), pero tomando solo el encabezado de la última palabra.

Estoy usando estas abreviaturas poco conocidas:

  • ! word_designator ! word_designator es equivalente a !!: word_designator para !!: word_designator no numérico s (por ejemplo ,! !$ es equivalente a !!:$ ) y
  • !: modifier es equivalente a !!: modifier (por ejemplo, !:h es equivalente a !!:h ).

En este caso, normalmente lo hago: (tengo enlace de clave emacs)

cd Alt-dot Alt-b (n veces) Ctrl-K

mejor:

cd Alt-dot ALT-Retroceso (n veces)

la nota alt-b o ALT-Bs puede presionarse varias veces, hasta que esté satisfecho con la ruta.


En lugar de navegar por el historial, también puede considerar el uso de la variable $_ para referirse al último argumento del comando anterior (consulte _ en la sección Parámetros especiales de bash(1) ).

Para eliminar aún más el componente de nombre de archivo ("todo después de, e incluyendo, la última barra diagonal"), use la expansión de parámetros (Eliminar patrón de sufijo coincidente):

$ cat this/very/long/filename.txt $ cd ${_%/*}

El último comando será cd this/very/long desde que /filename.txt se eliminó. Una diferencia con la expansión del historial es que este comando ( cd ${_%/*} ) se agrega al historial.


Esta versión más corta también funcionaría:

cd !$:h

Detalles:

  • !$ es sinónimo de !!:$ que presenta el último argumento del comando anterior.
  • : separa el modificador del designador de palabra de evento.
  • h es el modificador que elimina el componente de nombre de archivo final.

Et voilà. ¡Los modificadores de la historia vienen al rescate!

$ cd !!:$:h

que se puede abreviar a

$ cd !$:h

Este comando toma el último argumento del comando anterior y elimina el nombre de la ruta final .

En más detalles:

  1. !! se expande al comando anterior
  2. :$ expande al último argumento del comando anterior
  3. :h toma el encabezado ; es decir, elimina el nombre del archivo (que es la parte final del último argumento anterior)

Como un aparte,

!!:$:t

hace exactamente lo contrario.

Para una discusión en profundidad, consulte la documentación de Bash .


cat this/very/long/filename.txt cd !!^:h cd this/very/long

  • !! se refiere al último comando
  • ^ primer argumento, segunda palabra (designadores de palabras)
  • :h elimina el componente de ruta de acceso, dejando la cabeza (modificadores).