Execute um comando com o argumento do último comando

34

Ao executar comandos, às vezes talvez você precise executar um comando com o argumento do último comando. Como você pode fazer isso?

É claro que, com exceção do uso das teclas de seta e Delchaves: ... DelDelDel... Del<new_command>.

Radu Rădeanu
fonte

Respostas:

45

Por exemplo, se você executar este comando:

mkdir long_path_here/new_dir

provavelmente você deseja ir no diretório criado recentemente. Você pode fazer isso usando os próximos "atalhos":

  • cd Esc.- digite cde após pressionar, Escseguido por .(não no mesmo tempo). Se o comando anterior não tiver argumentos, você receberá o próprio comando anterior.
  • cd !*- neste caso, você obterá todos os argumentos do comando previuos. Se o comando anterior não tiver argumentos, você não receberá nada.
  • cd Alt+ .- digite cde depois pressione Alte .(ao mesmo tempo). De fato, dessa maneira, e continuando pressionando .(sem liberar Alt), você obterá o último argumento para cada comando do histórico. Se um comando não tiver argumentos, você receberá o próprio comando.

Em geral: <command> Esc.ou <command> !*ou <command> Alt+ ..

Radu Rădeanu
fonte
wow, você me salvou centenas de horas eu teria acabou perdendo no próximo par de anos
pranavk
32

Existem alguns atalhos se você deseja todos os argumentos do comando anterior ou apenas o último argumento.

  • Para todos os argumentos: <command> !*
  • Apenas para o último argumento: <command> !$

Exemplos:

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

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

Se você deseja um único argumento de uma lista de argumentos do comando anterior, pode usar <command> !!:<argNumber>

Exemplo:

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
fonte
2
Você só precisa de um !na versão arg, por exemplo !:2,. Supondo que o bash padrão.
Belacqua
3
Você também pode usar !^no lugar de !:1.
Paddy Landau
7

Mencionado !*e !$é uma coisa boa, mas quando você precisar fazer uma pequena edição, os atalhos da linha de leitura vêm para ajudar!

Por exemplo, em vez dos inúmeros ... DelDelDel... Delvocê pode simplesmente pressionar Ctrl-a(pular para o início da linha) Alt+d(excluir para o final da palavra)

Para mais informações man readlinee procure Default key bindings.

defhlt
fonte
4

Para pegar o nth argumento do seu comando anterior, digite Alt+ n+ Alt_. Por exemplo, depois de:

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

digitar echoseguido de Alt2Alt_fornecerá isso no próximo prompt:

$ echo 2

A "captura de tela" depois que você clicar Alt2é:

(arg: 2) echo

Você pode repetir Alt_várias vezes para obter o nth argumento dos comandos anteriores em sucessão.

Outra idéia útil é definir alias r="fc -s". Em seguida, você pode fazer substituições de comando:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Alok
fonte