Como você se lembra do último argumento (n-ésimo) passado do comando anterior usado com o bash?

9

Muitas vezes, emito comandos diferentes no mesmo arquivo. Por exemplo:

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

Existe uma maneira de reutilizar argumentos do comando anterior no atual para que eu não precise reescrevê-lo?

badp
fonte

Respostas:

15

alt-.certamente é bom, mas se você já sabe qual argumento numerado deseja, pode ser mais rápido: !:né o nth argumento do comando anterior.

Muitas vezes, é útil combinar isso com o espaço mágico. Para habilitar isso, coloque seu .inputrc Space: magic-space. Com isso ativado, quando você digitar o espaço depois !:2, ele será imediatamente expandido para seu valor, em vez de esperar que você pressione enter. Evita que você pegue acidentalmente o argumento errado.

Cascabel
fonte
9

No bash, você pode usar o atalho Alt+ ..
Acertando uma vez, você terá o último argumento. Atingir mais irá percorrer seus últimos argumentos.

cristão
fonte
4

No bash, o designador da "última palavra na linha de comando anterior" é !!$:

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

Você também pode usar a "sintaxe de intercalação" para substituir a parte inicial da linha de comando; isso é útil se você deseja executar vários comandos no mesmo arquivo:

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

Existem muito mais possibilidades; consulte "Substituição de histórico" na página do manual bash (1) para obter detalhes.

Riccardo Murri
fonte
Essa sintaxe acento circunflexo é realmente mais lento do que pressionar a seta para cima e editar a linha de comando a si mesmo ...
badp
11
!!$também pode ser escrito !$.
Mikel
3

No bash, você também pode usar $ _ para o último argumento de linha de comando do último comando digitado:

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

torna-se:

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

Uma maneira relativamente lenta é recuperar o comando anterior e substituir o comando anterior pelo comando mais recente.

badp
fonte
Eu estou esperando por algo mais rápido :)
badp