Pesquisa de histórico de bash, parcial + seta para cima

119

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

No passado, eu tinha um usuário em um sistema debian e um amigo me preparou com um recurso de pesquisa de histórico conveniente (acredito que usei o tcsh), onde eu digitaria o início de um comando anterior, -arrow, e faria uma busca, baseada na string parcial.

Por exemplo se minha história é:

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

E eu digito . e, com a seta para cima, ele mostra: ./script.pl arg1 . Pressione novamente e mostrará ./script.pl , etc.

É muito parecido com um grep na .bash_history. Existe uma maneira de obter essa funcionalidade?

    
por TLP 03.09.2011 / 14:11

4 respostas

169

Coloque as seguintes linhas no seu ~/.inputrc :

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

As linhas que começam com # são comentários. Eu não consigo lembrar o que está atrasado e o que está à frente. Experimente com isso. Talvez você tenha que voltar e avançar.

Um pouco de informação de fundo:

O Bash está usando readline para lidar com o prompt. ~/.inputrc é o arquivo de configuração para readline. Observe que isso também terá efeito em outro software usando a biblioteca readline, por exemplo, IPython .

Leia o manual do bash para obter mais informações sobre readline. Lá você também pode encontrar mais comandos relacionados à história readline .

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

  1. Inicie o cat em um terminal (apenas cat , sem mais argumentos).
  2. Digite as teclas no teclado para obter itens como ^[[A para a seta para cima e ^[[B para a seta para baixo.
  3. Substitua ^[ por \e .
por lesmana 03.09.2011 / 15:31
19

Crie um arquivo chamado setup_readline.sh com o modo 644 em /etc/profile.d/ com o seguinte conteúdo, faça o 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!

    
por user287613 02.06.2014 / 09:58
12

Ctrl + R fornece esse tipo de funcionalidade. Comece a digitar um comando parcial e ele irá aparecer com os antigos que você pode navegar com as setas para cima e para baixo. Mais informações: link

    
por Andrew Moss 03.09.2011 / 14:17
3

Para completar a resposta da lesmana sobre "~ / .inputrc" que eu deveria criar no meu Trusty 12.04, verifique / adicione em "~ / .bashrc" (a primeira linha já existe no meu "~ / .bashrc"):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Ele já está explicado em francês no link .

    
por bcag2 14.10.2015 / 10:31