Desculpas, este título não é o mais elegante que eu já criei.
Mas suponho que muitas pessoas tenham se perguntado isso, e minha pergunta pode ser uma bobagem ... tudo o que posso dizer é que não a encontrei.
Quando digo "rolando" para cima, quero dizer, usando a tecla "seta para cima" no teclado, que obviamente percorre o histórico, iniciando no comando mais recente.
Então você encontra um comando talvez 30 comandos de volta ... e você o executa. E então você deseja executar o comando que veio depois dele ... existe uma maneira rápida de fazer isso? Ou como os fluentes no BASH fazem isso?
fonte
vi
edição de linha (ativada comset -o vi
) ouemacs
? PorqueCtrl-O
não vai funcionar com o primeiro, tanto quanto eu posso dizer.bind "\C-o":operate-and-get-next
(ou adicione tudo depoisbind
de~/.inputrc
) #A resposta de Jon Reinhold é ótima, mas há uma solução muito mais poderosa que vou sugerir. Também tenho um comentário sobre uma pegadinha na resposta de Jon, mas não tenho reputação suficiente para poder comentar diretamente, então @ Jon Reinhold, se você ler isso, envie meu comentário abaixo.
O Bash inclui um comando
fc
, que assume como parâmetros os números de linha da lista do histórico do bash. Em seguida, abre o editor padrão com essas linhas como texto. Nesse ponto, você pode opcionalmente editar as linhas. Então, quando você sai do editor, o bash executa essas linhas!Um exemplo de edição que você pode querer fazer é anexar a todos, exceto a última linha, algo como "; read -p" next ... "Isso fará com que o bash execute cada linha e avise antes de continuar.
Comentário para Jon Reinhold: Ótima resposta, mas você deve qualificá-la porque se o usuário definiu a variável bash HISTCONTROL para incluir
erasedups
, depois de executarC-o
o usuário ficará confuso porque, em vez de o próximo comando esperado no histórico ser exibido, aquele depois disso será exibido. Isso ocorre porque o bash excluiu a instância original do comando executado e, portanto, todos os comandos posteriores mudaram uma linha, ie. para um número de índice inferior na lista do histórico.fonte
fc
antes de siCtl-o
e debash
si mesmo. (Ao contrário do que esta resposta também é menos útil.)erasedups
é claramente um bug do bash ( poderia haver provisão para essa situação). É bom saber, no entanto.Outra maneira de realizar seu comportamento desejado seria de se familiarizar com os atalhos do bash readline (dos quais CTRL- oé um que eu acredito) e pesquisando a história bash.
Pesquisa de histórico
CTRL- rleva você à pesquisa do histórico de comandos do bash, onde você pode começar a digitar o comando que está procurando e o bash completará automaticamente o comando para você. A funcionalidade de preenchimento automático é realmente muito boa. Quando o comando que você deseja executar estiver na linha de entrada, você poderá ENTERexecutá-lo ou pressionar CTRL- epara mover o cursor até o final da linha de comando e sair do modo de pesquisa de histórico.
O legal de CTRL- eneste momento é que o buffer do histórico é definido contextualmente para este comando. Os comandos seguintes e anteriores agora são os executados imediatamente antes e depois da linha que a pesquisa de histórico localizou para você. Você pode pressionar as setas para cima ou para baixo e pegar o próximo comando.
A pesquisa de histórico é muito poderosa e é uma ótima maneira de evitar o uso da seta para cima para voltar ao comando em primeiro lugar. Uma pesquisa rápida no histórico pode economizar muito tempo pesquisando manualmente no histórico e, em seguida, você pode prosseguir CTRL- ocomo Jon apontou acima.
Readline Short Cuts
Se você deseja aumentar o seu bash-fu geral, recomendo dar uma chance aos atalhos da linha de leitura das teclas de seta. Você pode achar que eles são mais convenientes e permitem aumentar sua velocidade de digitação, mas é claro o YMMV. Aqui estão mais alguns:
Esses atalhos readline (juntamente com CTRL- ao início da linha e CTRL- efim de linha) irá aumentar a sua velocidade e eficiência na linha de comando imo.
fonte