Procure um comando anterior com o mesmo prefixo quando pressiono Up em um prompt do shell

Procure um comando anterior com o mesmo prefixo quando pressiono Up em um prompt do shell

Vindo de um mundo FreeBSD eu desejo fazer com que o terminal Linux se comporte como o FreeBSD, especialmente a versão 9.1, basicamente quando você digita cdno terminal e pressiona a seta "para cima" você pode navegar por todos os comandos no histórico começando com cdo que faz você ganhar muito tempo.

Não sei como habilitar esse recurso no Linux Debian ou CentOS que me obriga a digitar tudo, alguém poderia ajudar.

Responder1

Adicione ao seguinte para ~/.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 paraLinha de leitura GNU. Muitos shells, incluindo bashe tcshusam readline para edição de linha de comando. As duas linhas acima dirão ao readline para invocar sua funcionalidade de pesquisa de histórico quando as sequências de escape para a tecla de seta para cima ( \e[A) e a tecla de seta para baixo ( \e[B) forem encontradas.

Responder2

O que está acontecendo é que o FreeBSD e o Linux usam shells diferentes por padrão. O padrão do FreeBSD étcsh, que tinha recursos interativos melhores que o bash no passado (mas o bash se atualizou), masrecursos de script notavelmente piores.

A maneira mais direta de obter o ambiente ao qual você está acostumado seria mudar seu shell para tcsh no Linux. Desde 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 tcshpara alterar seu shell padrão.

Alternativamente, você pode configurar o bash para ter este comando com o qual está acostumado. Por padrão, as setas Upe Downnavegam entre todos os comandos do histórico, não apenas aqueles que começam com o prefixo que você digitou. Para alterar o comportamento com o qual você está acostumado, coloque as seguintes linhas no arquivo de inicialização do bash, que está .bashrcem seu diretório inicial. Execute . ~/.bashrcou 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 sequências de escape são o que seu terminal envia para o shell quando você pressiona uma tecla de seta. Uppode ser \eOA(escape, O, A) ou \e[Adependendo do seu terminal, e da mesma forma para Down.

Por padrão, o bash oferece diferentes combinações de teclas para pesquisar o histórico de comandos. Você pode pressionar Ctrl+ Re inserir alguns caracteres para procurar um comando contendo esta substring em qualquer lugar da linha. Pressione Ctrl+ Spara avançar em vez de retroceder. A pesquisa é incremental (ou seja, conforme você digita); Alt+ Pe Alt+ Nfornecem uma pesquisa não incremental.

Em vez de bash e tcsh, você poderia mudar para zsh, quetem alguns recursos interessantes não encontrados em outros shells. Zsh tem Ctrl+ Re Ctrl+ Spor padrão, assim como o bash. Para obter Upe Downcomo você tinha no tcsh, coloque as seguintes linhas ~/.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 quiser usar o mesmo shell em qualquer lugar, você também pode usar bash ou zsh no FreeBSD, desde que o port esteja instalado (novamente, pergunte ao administrador do sistema).

Responder3

tcshestá disponível para a maioria das distribuições Linux. Tente instalar o tcshpacote e depois executá-lo chsh -s /bin/tcshpara torná-lo seu shell padrão.

informação relacionada