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

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


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/

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.