Conclusão da linha de comandos a partir do histórico de comandos


85

Então, olhei para a história e para o Ctrl+ R, mas elas não são o que eu pensava que sabia. Existe uma maneira de digitar o início de um comando e percorrer as correspondências do meu histórico com algum atalho do bash?

# mysq(some shortcut key)

Dá-me:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p

Nota lateral: existe '<kbd> Alt + Tab </kbd>' para os tty sem área de trabalho.
NeverMind9

Respostas:


91

Pressionar Ctrl+ Rabrirá a pesquisa de histórico reverso. Agora comece a digitar seu comando, isso dará a primeira correspondência. Pressionando Ctrl+ Rnovamente (e novamente), você pode percorrer o histórico.

mysq(Ctrl+R)

Daria:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rnovamente:

mysql -u ben.dauphinee -p

5
Obrigado. Além disso, Esc colocará o comando selecionado em sua linha de comando sem executar, enquanto Enter executará o comando selecionado.
Ben Dauphinee

3
Acho CTRL + E melhor para isso do que ESC, porque a fuga é difícil de alcançar, mas eu já estou pressionando CTRL + R, então E está lá. Isso também posiciona o cursor no final da linha, o que é útil no caso de eu querer alterar algo (como um nome de arquivo) que considero um caso comum.
Sorpigal

Infelizmente, ele não funciona em Cygwin
ATorras

2
No Mac, pelo menos, parece mysq(CTRL+R)(CTRL+R)que não percorre os comandos que começam com "mysq". Você precisa fazer em (CTRL+R)mysq(CTRL+R)vez disso
BlueRaja - Danny Pflughoeft

62

Para expandir o que Gilles disse, tenho o seguinte no meu .inputrcpara vincular a tecla de seta para cima / para baixo history-search-backwarde history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Basta digitar algo (opcional) e pressionar a tecla de seta para cima / baixo para pesquisar no histórico os comandos que começam com o que você digitou.

Para fazer isso em .bashrcvez de .inputrc, você pode usar:

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

3
essas ligações pertencem a ~ / .inputrc ... obrigado por apoiar minha preguiça.
Martin Zeitler

Vale ressaltar que o '\ e' é crucial, pelo menos para os estreantes do bash. Apenas digitar Ctrl-V para obter o pressionamento de tecla do seu comando não conta toda a história. Por exemplo, digitar Ctrl-V Meta-P (ou seja, Alt-P) retorna ^ [p - para obter o comportamento desejado, substitua o "^ [" por '\ e'.
MrMas

Concordo com @syslogic - insira as linhas em .inputrc e solte a vinculação e as aspas simples.
MrMas

copiando e colando isso em .inputrc no osx, recebo: source ~ / .inputrc -bash: \ e [A :: comando não encontrado -bash: \ e [B :: comando não encontrado -bash: \ eOA :: command não encontrado -bash: \ eOB :: command not found
Walrus the Cat

1
Consulte superuser.com/questions/241187/how-do-i-reload-inputrc . Você não pode obter o arquivo.
raychi

7

Você também pode pressionar o PAGEUPbotão para concluir automaticamente um comando. Basicamente, pesquisa o bash_historyarquivo.


Você precisa descomentar duas linhas /etc/inputrcou adicionar essas duas linhas ao seu $HOME/.inputrcarquivo: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix

5

Você pode usar os comandos readline history-search-backwarde history-search-forwardnavegar entre as linhas de comandos começando com o prefixo que você já digitou. Nenhum desses comandos está vinculado às chaves na configuração padrão.

Zsh (zle) possui comandos semelhantes history-beginning-search-backwarde history-beginning-search-forward, também não está vinculado a chaves por padrão. Também existem history-search-backwarde history-search-forward, que usa a primeira palavra do comando atual como prefixo para pesquisar, independentemente da posição do cursor.


4

Se você quiser uma boa visão geral de comandos muito semelhantes, poderá obter uma lista com:

history|grep KEYSTRING

Em seguida, copie e cole com o botão do meio do mouse.

Rgds - Joe

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.