Melhor maneira de pesquisar no histórico do Shell

Melhor maneira de pesquisar no histórico do Shell

Existe uma maneira melhor de pesquisar um comando em meu arquivo de histórico do que grep? Tenho alguma ideia de como o comando começa, mas não sei até que ponto ele está na história.

atualizar:anteriormente era específico do zsh, mas devido à sobreposição de respostas, sinta-se à vontade para responder por qualquer shell (ou modo (vi/emacs)) aqui, apenas observe se é específico.

Responder1

Ctrl+ Rgeralmente é a melhor maneira, poisdescritor disse. Você também pode usar !string, que executa o comando mais recente começando com string, ou !?string?, que executa o comando mais recente que contém string.

(Acho que essa é a única coisa relevante para esta questão, mas abordei muito mais comandos de histórico emesta resposta)

Responder2

Ao usar o Bash, digite Control- Re comece a digitar. Digitar Control- Rrepetidamente após inserir algum texto o levará de volta às linhas de comando correspondentes.

Responder3

Se você adicionar o seguinte a~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

e reiniciar o Bash, você pode começar a digitar e, em seguida, usar Page Upe Page Downpara retroceder e avançar no histórico de linhas começando com o mesmo prefixo que acabou de digitar.

(Alguns podem preferir usar \e[Aand \e[B, que substituirá as ações Upand normais Downem vez de vincular novas chaves.)

Responder4

O prompt interativo invocado por Ctrl- R, já mencionado, é a forma mais conveniente. Além disso, é comum remapear Upe Downusar teclas de seta para pesquisar no histórico um prefixo atualmente na linha de comando, no entanto, isso requer algunsalterações no ~/.inputrcarquivo.

A solução clássica e menos interativa é usar a expansão do histórico do shell. Digitando

!foo

irá executar o último comando que começa com fooe

!?foo

executará o último comando que contém foo. Mais informações sobre a expansão do histórico podem ser encontradas noManual de referência do Bash, assumindo que seu shell seja Bash ou compatível.

informação relacionada