Documentação para o seguinte no shell Bash:! Keyword

2

Se você fizer o seguinte no Bash - talvez em outros shells também -, você executará um comando do seu histórico que corresponda à palavra-chave fornecida:

$ !keyword

Eu estou procurando documentação para este comando. Eu tentei pesquisar através do homem bash page mas sem sorte. Eu também tentei o Google, mas é quase impossível (certo?) Para procurar pontuação no Google.

Eu quero saber:

  1. Que ordem este comando pesquisa seu histórico? Comando mais antigo para o mais recente? Ou outro caminho?

  2. Estou ciente de adicionar a opção : p no final do comando para impedir a execução, mas há outras opções? Embora não tenha certeza do que outras opções que eu quero, mas apenas curioso.

Claro que eu poderia descobrir isso por tentativa e erro, mas eu prefiro olhar através da documentação antes de usar este comando puro.

Talvez eu esteja procurando no lugar errado? Qualquer ajuda no rastreamento da documentação seria muito apreciada.

Belmin Fernandez
fonte

Respostas:

2

Isso é chamado de expansão do histórico . A maioria dos comandos de expansão de histórico se refere à linha de comando correspondente mais recente (as exceções são referências a uma linha de comando por número).

Os formulários mais úteis estão expandindo para o comando mais recente, começando com , expandindo para o comando mais recente que contém e substituindo por no comando anterior.!prefixprefix!?substring?substring^from^tofromto

Você pode extrair apenas uma palavra específica em vez da linha inteira adicionando um designador de palavra , como em

ls foo bar *~ *.pdf
rm !*

Modificadores podem realizar substituições de strings e extrair partes de palavras. O modificador :pfaz com que o comando resultante seja impresso, mas não executado.

Gilles
fonte
0

O pedido é mais recente para o mais antigo.

!nexecuta o comando com o número nem history.

!-nexecuta o enésimo último comando no history.

!!executa o último comando (ie !-1).

Você também pode, por exemplo, sudo !!se você esqueceu de prefixar algo com sudo.

Você pode procurar bangou bang bangencontrar algo sobre esses comandos, como este ou este

Além disso:

A maioria dos shells modernos suportam comandos bang do csh - bash, tcsh e zsh todos fazem. Enquanto alguns comandos bang não funcionam em todos esses shells, todos os seguintes fazem

Então você pode ser melhor procurar na cshdocumentação.

Daniel Beck
fonte