Pesquisa de histórico do Bash, parcial + seta para cima

Pesquisa de histórico do Bash, parcial + seta para cima

Eu procurei, mas não encontrei nada sobre isso. Estou procurando uma funcionalidade no bash, usando um terminal.

Há muito tempo, eu tinha um usuário em um sistema Debian e um amigo me configurou um recurso conveniente de pesquisa de histórico (acredito que usei o tcsh na época), onde eu digitava o início de um comando anterior, pressionava a seta para cima, e faria uma pesquisa, com base na string parcial.

Por exemplo, se meu histórico for:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

E eu digito .e pressiono a seta para cima, isso me mostraria: ./script.pl arg1. Pressione-o novamente e ele mostrará ./script.pl, etc.

Muito parecido com o que seria executado grepem .bash_history. Existe uma maneira de obter essa funcionalidade?

Responder1

Crie ~/.inputrce adicione estas linhas:

# Respect default shortcuts.
$include /etc/inputrc

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

DICA:Leia na parte inferior uma explicação $include /etc/inputrcou o que fazer se você já tiver o arquivo ~/.inputrc.

As linhas que começam com #são comentários.

Não consigo lembrar o que está para trás e o que está para frente. Experimente. Talvez você tenha que retroceder e avançar.

Feche e reabra todos os terminais para que o novo comportamento entre em vigor.


Algumas informações básicas:

Bash está usandoLeia a linhapara lidar com o prompt. ~/.inputrcé o arquivo de configuração do readline. Observe que isso também terá efeito em outros softwares que usam a biblioteca readline, por exemploIPython.

Leia omanual do bashpara obter mais informações sobre a linha de leitura. Lá você também pode encontrar maiscomandos readline relacionados ao histórico.

Para obter os códigos de escape das teclas de seta, você pode fazer o seguinte:

  1. Comece catem um terminal (apenas cat, sem mais argumentos).
  2. Digite teclas no teclado, você obterá coisas como ^[[Aseta para cima e ^[[Bseta para baixo.
  3. Substituir ^[com \e.

Para mais informações sobre ^[e \eveja aqui:https://unix.stackexchange.com/a/89817/380515


Sobre a linha $include /etc/inputrc:

Readline tenta ler ~/.inputrca configuração. Se esse arquivo não existir, ele tentará ler /etc/inputrc. Isso significa que se ~/.inputrcexistir, não será lido /etc/inputrc.

Algumas distros prepararam algumas configurações em /etc/inputrc. Se você criar, ~/.inputrcperderá a configuração preparada. Isso pode ou não ser o que você deseja. Para ainda manter a configuração preparada, /etc/inputrcvocê pode usar a linha $include /etc/inputrcno seu arquivo ~/.inputrc.

Se você já possui o arquivo ~/.inputrc, significa que já sabe o que está fazendo. Ou você herdou se da pessoa que configurou seu sistema. Ou você seguiu anteriormente um guia diferente que lhe dizia para criar o arquivo e se esqueceu dele. De qualquer forma, você pode querer verificar /etc/inputrce decidir se deseja mantê-lo com a linha $include /etc/inputrc.

Responder2

Crie um arquivo chamado setup_readline.sh com modo 644 em /etc/profile.d/ com o seguinte conteúdo, faça login e verifique suas chaves preferidas:

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

Eu acho que é a melhor maneira de fazer isso. Principalmente se você estiver usando sistemas de gerenciamento de configuração, como chef, fantoche, etc.

E a configuração do sistema ainda está intacta!

Responder3

Ctrl + Rlhe dará esse tipo de funcionalidade. Comece a digitar um comando parcial e surgirão comandos antigos nos quais você pode navegar com as setas para cima e para baixo.

Mais informaçõesaqui.

Responder4

Para completar a resposta de lesmana sobre ~/.inputrco que devo criar no meu Trusty 14.04, verifique/adicione ~/.bashrc(a primeira linha já existe no meu ~/.bashrc):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Já está explicado em francêsaqui.

informação relacionada