it-swarm-pt.com

Melhor maneira de pesquisar o histórico da Shell

Existe uma maneira melhor de procurar um comando no meu arquivo de histórico do que o grep? Eu tenho alguma idéia de como o comando começa, mas não sei até que ponto a história está lá.

pdate: anteriormente era específico do zsh, mas devido a respostas sobrepostas, sinta-se à vontade para responder a qualquer Shell (ou modo (vi/emacs)) aqui, observe se é específico.

82
xenoterracide

Ctrl+R geralmente é o melhor caminho, 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 esse é o único material relevante para esta pergunta, mas eu abordei muito mais dos comandos de histórico em esta resposta )

78
Michael Mrozek

Ao usar o Bash, digite Control-R e comece a digitar. Digitando Control-R repetidamente após a inserção de algum texto, você retornará às linhas de comando correspondentes.

32
grendel

Não tenho certeza se isso vai ajudar, mas eu gosto de usar ctrl-r e comece a digitar o comando Ele deve passar por sua história e apresentar a primeira partida. Para alternar entre as partidas, basta pressionar ctrl-r novamente.

18
decriptor

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 usar Page Up e Page Down para retroceder e avançar no histórico de linhas começando com o mesmo prefixo digitado.

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

17
ephemient

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

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 seja Bash ou compatível.

9
Adam Byrtek

Se você adicionar stty -ixon para o seu ~/.bashrc arquivo então Ctrl-s vai na direção oposta a Ctrl-r.

6

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

3
Kevin M

pode ser específico do zsh. Ao pesquisar esta resposta I encontradovi-history-search-backward que permite pesquisar com / no modo vi (que eu não mencionei que estava), você pode usar n e N para procurar para frente e para trás, respectivamente (depois de pressionar enter).

2
xenoterracide

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

set -o vi

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

set editing-mode vi

Depois disso, você pode usar Esc para inserir modo de comando e use k voltar na história e j ir adiante. Você também pode pesquisar usando / para procurar normalmente e ? para procurar em sentido inverso.

Se você usar ~/.inputrc, isso funcionará não apenas em GNU bash, mas em qualquer coisa que use GNU readline como CLISP e possivelmente programas como o comando MySQL Shell e outros o CPAN Shell.

2
Mei

Para avançar ao usar a pesquisa reversa (com o comando Ctrl-R):

  1. Abra o 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 ou . ~/.bashrc

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

Trabalhando no Ubuntu 18.04 LTS

2
Franklin TCHATATH

Eu uso as duas seguintes na maioria das vezes.
Mas observe que os dois pesquisam caracteres iniciais.

  1. tcsh: digite alguns caracteres do comando e, em seguida, Esc+p ele mostrará o comando anterior começando com essa sequência de teclas e pressione-o novamente; ele mostrará outro comando.
  2. ksh: use fc -e - <SPACE><first few char for your previous > isso executará o último comando correspondente a essa sequência.

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

1
Hemant

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.

1
Alain

resposta semelhante a @ephemient, mas você pode colocar no 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ê deseja portar suas configurações para um novo sistema, é mais fácil lembrar-se de pegar apenas o seu ~/.bashrc então que você tem que pegar isso ~/.inputrc

1
Matt S.

Sim, existe, pelo menos se você estiver usando o zsh. Basta começar a digitar o comando e pressionar M-p (ESCp) e encontrará comandos anteriores que correspondem ao que você digitou. Pressione novamente para encontrar a próxima partida.

0
dkagedal