¿Cómo recuerdas el último (n-ésimo?) Argumento pasado del comando anterior que usaste con bash?

9

Muchas veces emito diferentes comandos en el mismo archivo. Por ejemplo:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

¿Hay alguna forma de reutilizar argumentos del comando anterior en el actual para que no tenga que volver a escribirlo?

badp
fuente

Respuestas:

15

alt-.es ciertamente agradable, pero si ya sabe qué argumento numerado desea, puede ser más rápido: !:nes el nargumento th del comando anterior.

A menudo es útil combinar esto con el espacio mágico. Para habilitar eso, ingrese su .inputrc Space: magic-space. Con eso habilitado, cuando escriba espacio después !:2, se expandirá inmediatamente a su valor en lugar de esperar a que presione enter. Le salva de agarrar accidentalmente el argumento equivocado.

Cascabel
fuente
9

En bash puedes usar el atajo Alt+ ..
Golpearlo una vez, te dará el último argumento. Si lo golpeas más, pasarás por tus últimos argumentos.

cristiano
fuente
4

En bash, el designador para la "última palabra en la línea de comando anterior" es !!$:

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

También puede usar la "sintaxis de intercalación" para reemplazar la parte inicial de la línea de comando; Esto es útil si desea ejecutar varios comandos en el mismo archivo:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

Hay muchas más posibilidades; consulte "Sustitución del historial" en la página del comando man bash (1) para obtener más información.

Riccardo Murri
fuente
Que la sintaxis de intercalación es en realidad más lento que pulsar la flecha hacia arriba y la edición de la línea de comandos a sí mismo ...
BADP
1
!!$Se puede escribir !$también.
Mikel
3

En bash, también puede usar $ _ para el último argumento de línea de comando del último comando que escribió:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

se convierte en:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_
fschmitt
fuente
0

Una forma relativamente lenta es recuperar el comando anterior con y reemplazar el comando anterior con el más nuevo.

badp
fuente
Espero algo más rápido :)
badp