Procura por um comando anterior com o mesmo prefixo quando eu pressiono Acima em um prompt do shell

19

Vindo de um mundo do FreeBSD eu quero fazer o terminal Linux se comportar como o do FreeBSD, especialmente a versão 9.1, basicamente quando você digita cd no terminal e pressiona a seta "para cima" você pode procurar todos os comandos no história começando com cd , o que faz você ganhar muito tempo.

Eu não sei como ativar esse recurso no Debian Debian ou no CentOS, o que me força a digitar o todo, alguém poderia me ajudar.

    
por Abdelilah Benaou 17.10.2013 / 19:10

4 respostas

33

Adicione o seguinte a ~/.inputrc :

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Explicação

~/.inputrc é o arquivo de configuração para linha de leitura GNU . Muitos shells, incluindo bash e tcsh , usam readline para edição de linha de comando. As duas linhas acima informarão ao readline para invocar sua funcionalidade de pesquisa de histórico quando as seqüências de escape da tecla de seta para cima ( \e[A ) e da tecla de seta para baixo ( \e[B ) forem encontradas.

    
por 17.10.2013 / 19:16
7

O que está acontecendo é que o FreeBSD e o Linux usam shells diferentes por padrão. O FreeBSD usa como padrão o tcsh , que tinha melhores recursos interativos do que o bash no passado (mas o bash alcançou), mas recursos de script marcadamente piores .

A maneira mais direta de obter o ambiente que você está acostumado seria trocar seu shell para o tcsh no Linux. Contanto que o tcsh esteja instalado em todo o sistema (se não estiver, peça ao administrador do sistema para instalá-lo), execute chsh -s tcsh para alterar o shell padrão.

Alternativamente, você pode configurar o bash para ter este comando que você está acostumado. Por padrão, as setas Up e Down navegam entre todos os comandos no histórico, não apenas aqueles que começam com o prefixo que você digitou. Para mudar isso para o comportamento que você está acostumado, coloque as seguintes linhas no arquivo de inicialização do bash, que é .bashrc em seu diretório inicial. Execute . ~/.bashrc ou inicie um novo shell para reler o arquivo de inicialização.

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

As seqüências de escape são o que seu terminal envia ao shell quando você pressiona uma tecla de seta. Acima pode ser \eOA (escape, O , A ) ou \e[A dependendo do seu terminal, e similarmente para Abaixo .

Por padrão, o bash oferece diferentes ligações de teclas para pesquisar o histórico de comandos. Você pode pressionar Ctrl + R e, em seguida, digitar alguns caracteres para procurar um comando que contenha esta substring em qualquer lugar da linha. Pressione Ctrl + S para avançar, em vez de retroceder. A pesquisa é incremental (ou seja, como você digita); Alt + P e Alt + N fornecem uma pesquisa não incremental.

Em vez de bash e tcsh, você pode alternar para zsh, que tem alguns recursos interessantes não encontrados em outros shells . Zsh tem Ctrl + R e Ctrl + S por padrão, assim como o bash. Para obter Up e Down como você tinha em tcsh, coloque as seguintes linhas em ~/.zshrc :

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Se você quiser usar o mesmo shell em todos os lugares, você pode usar bash ou zsh no FreeBSD também, desde que a porta esteja instalada (novamente, pergunte ao administrador do sistema).

    
por 18.10.2013 / 01:39
1

tcsh está disponível para a maioria das distribuições do Linux. Tente instalar o pacote tcsh e, em seguida, execute chsh -s /bin/tcsh para torná-lo seu shell padrão.

    
por 17.10.2013 / 19:47
1

Outras respostas lidam com isso, mas se você quiser mais, dê uma olhada no link

O Prezto ( link ) também é cheio de itens de zsh.

    
por 22.10.2013 / 01:23