
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 grep
em .bash_history. Existe uma maneira de obter essa funcionalidade?
Responder1
Crie ~/.inputrc
e 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/inputrc
ou 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:
- Comece
cat
em um terminal (apenascat
, sem mais argumentos). - Digite teclas no teclado, você obterá coisas como
^[[A
seta para cima e^[[B
seta para baixo. - Substituir
^[
com\e
.
Para mais informações sobre ^[
e \e
veja aqui:https://unix.stackexchange.com/a/89817/380515
Sobre a linha $include /etc/inputrc
:
Readline tenta ler ~/.inputrc
a configuração. Se esse arquivo não existir, ele tentará ler /etc/inputrc
. Isso significa que se ~/.inputrc
existir, não será lido /etc/inputrc
.
Algumas distros prepararam algumas configurações em /etc/inputrc
. Se você criar, ~/.inputrc
perderá a configuração preparada. Isso pode ou não ser o que você deseja. Para ainda manter a configuração preparada, /etc/inputrc
você pode usar a linha $include /etc/inputrc
no 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/inputrc
e 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 ~/.inputrc
o 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.