melhor maneira de pesquisar a história do meu shell

72

Existe uma maneira melhor de pesquisar no meu arquivo de histórico por um comando que o grep? Eu tenho alguma idéia do que o comando começa, mas eu não sei o quão longe está na história.

update: era específico do zsh, mas devido a respostas sobrepostas, fique à vontade para responder por qualquer shell (ou modo (vi / emacs)), apenas observe se é específico.

    
por xenoterracide 16.08.2010 / 21:43

14 respostas

72

Ctrl + R é geralmente a melhor maneira, como descritor disse . Você também pode usar !string , que executa o comando mais recente, começando com string ou !?string? , que executa o comando mais recente que contém string .

(eu acho que é o único material relevante para esta questão, mas eu cobri muito mais dos comandos de histórico em esta resposta )

    
por 16.08.2010 / 22:45
28

Ao usar o Bash, digite Controle - R e, em seguida, comece a digitar. Digitar Controle - R repetidamente após a introdução de algum texto irá movê-lo de volta nas linhas de comando correspondentes.

    
por 15.09.2010 / 09:31
18

Não tenho certeza se isso vai ajudar, mas eu gosto de usar ctrl - r e então começar a digitar o comando. Deve passar por sua história e apresentar-lhe o primeiro jogo. Para alternar entre as combinações, pressione ctrl - r novamente.

    
por 16.08.2010 / 21:46
15

Se você adicionar o seguinte a ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

e reinicie o Bash, você pode começar a digitar, e então usar Page Up e Page Down para retroceder e avançar no histórico de linhas iniciando com o mesmo prefixo que você apenas digitei.

(Alguns podem preferir usar \e[A e \e[B , o que substituirá as ações normais Up e Down em vez de ligar novas chaves.)

    
por 16.09.2010 / 04:01
8

O prompt interativo chamado por Ctrl - R , que já foi mencionado, é a maneira mais conveniente. Além disso, é popular remapear as teclas de seta Up e Down para procurar no histórico um prefixo atualmente na linha de comando, no entanto, isso requer alguns changes para o arquivo ~/.inputrc .

A solução clássica e menos interativa é usar a expansão do histórico do shell. Digitando

!foo

executará o último comando que começa com foo e

!?foo

executará o último comando que contém foo . Mais informações sobre a expansão do histórico podem ser encontradas no manual de referência do Bash , supondo que seu shell é Bash ou compatível.

    
por 15.09.2010 / 18:14
6

Se você adicionar stty -ixon ao seu arquivo ~/.bashrc , então Ctrl - s irá na direção oposta para Ctrl - < kbd> r .

    
por 16.09.2010 / 03:56
3

Se você digitar !ls , o bash examinará seu histórico e executará o comando mais recente que começa com "ls"

    
por 15.09.2010 / 21:04
2

pode ser específico de zsh. Em pesquisa esta resposta eu encontrei vi-history-search-backward que permite que alguém procure com / no modo vi (que eu não mencionei que eu estava) você pode então usar n e N para procurar para frente e para trás respectivamente (depois de pressionar enter ).

    
por 16.08.2010 / 23:32
2

Estou surpreso que isso não tenha sido mencionado - mas você pode selecionar o modo vi no bash ou ksh fazendo isso:

set -o vi

... ou usando isso como o conteúdo de ~/.inputrc (para a linha de leitura GNU usada em programas como o bash):

set editing-mode vi

Depois disso, você pode usar Esc para entrar no modo de comando e usar k para voltar no histórico, e j para seguir em frente. Você também pode pesquisar usando / para procurar normalmente, e ? para procurar reversamente.

Se você usar ~/.inputrc , isso funcionará não apenas no GNU bash, mas em qualquer coisa que use a linha de leitura GNU como o CLISP e possivelmente programas como o shell de comando do MySQL e como o shell CPAN.

    
por 04.02.2012 / 01:29
2

Para alternar ao usar a pesquisa inversa (com o comando Ctrl-R):

  1. Abra seu arquivo .bashrc:
    sudo gedit ~/.bashrc

  2. adicione esta linha (a letra "f" pode ser substituída por outra ainda não usada pelo sistema)

    bind '"\C-f": forward-search-history' 
    
  3. Feche seu arquivo e atualize seu .bashrc (ou abra outro terminal) com o comando:
    source ~/.bashrc or . ~/.bashrc

Agora você pode avançar na história com o atalho: Ctrl + f

Trabalhando no Ubuntu 18.04 LTS

    
por 15.06.2018 / 19:00
1

Eu uso seguindo dois a maior parte do tempo. Mas, por favor, note que ambos procuram por caracteres iniciais.

  1. tcsh : digite alguns poucos charecters do comando então Esc + p mostrará o comando anterior, iniciando com aquela sequência de teclas, pressione-o novamente mostra outro comando.
  2. ksh : use fc -e - <SPACE> <first few char for your previous > , isso executará o último comando correspondente a essa sequência.

Eu não consegui encontrar algo como Ctrl + R no Bash para meu ksh e tcsh.

    
por 17.08.2010 / 06:48
1

Existe uma maneira de usar Ctrl - R com tcsh . Adicione o seguinte no seu ~/.cshrc :

bindkey "^r" i-search-back (é apenas um sinal de sinal de intercalação e a letra r)

Essa é a maior economia de tempo para mim.

    
por 16.09.2010 / 16:59
1

resposta semelhante a @ephemient, mas você pode colocar em seu .bashrc

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

, digite parte da frase e use a seta para cima / para baixo para procurar as opções mais recentes correspondentes. Este é o comportamento padrão do matlab.

Para a maioria das pessoas, se você quiser portar suas configurações para um novo sistema, é mais fácil lembrar-se de apenas seu ~/.bashrc do que aquele que você precisa para capturar ~/.inputrc

    
por 15.07.2015 / 00:00
0

Sim, existe, pelo menos se você estiver usando zsh. Apenas comece a digitar o comando e depois pressione M-p ( ESC p ) e ele encontrará os comandos anteriores que correspondem ao que você digitou. Pressione novamente para encontrar o próximo jogo.

    
por 15.09.2010 / 18:53