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.
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 )
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.
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.
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.)
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.
Se você adicionar stty -ixon
para o seu ~/.bashrc
arquivo então Ctrl-s vai na direção oposta a Ctrl-r.
Se você digitar !ls
o bash examinará seu histórico e executará o comando mais recente que começa com "ls"
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).
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.
Para avançar ao usar a pesquisa reversa (com o comando Ctrl-R):
Abra o seu arquivo .bashrc:Sudo gedit ~/.bashrc
adicione esta linha (a letra "f" pode ser substituída por outra ainda não usada pelo sistema)
bind '"\C-f": forward-search-history'
source ~/.bashrc
ou . ~/.bashrc
Agora você pode avançar na história com o atalho: Ctrl + f
Trabalhando no Ubuntu 18.04 LTS
Eu uso as duas seguintes na maioria das vezes.
Mas observe que os dois pesquisam caracteres iniciais.
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.
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.
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
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.