Não é incomum que eu cometa um erro de digitação ao digitar comandos no meu shell interativo bash. Eu gostaria de poder corrigir o erro de digitação no meu histórico do bash para que o comando incorreto não o polua e me leve a executá-lo acidentalmente mais tarde. Em particular, gostaria de editar o último comando.
Há um grande número de perguntas sobre como evitar a edição acidental do histórico do bash. Eu quero o oposto: quero editar explicitamente o histórico.
Com base em algumas das explicações das perguntas referenciadas, tentei fazer:
$ echo foo
pressionando Up, alterando para:
$ echo foobar
pressionando Down, mas isso não faz nada, e se eu pressionar Enter, ele executará o comando modificado e deixará os dois
echo foo
echo foobar
na minha história.
Estou ciente de que posso excluir manualmente as entradas do histórico com history -d
, mas não criei uma boa maneira de usar isso convenientemente. Eu não quero fazer uma função shell para excluir incondicionalmente a última entrada do histórico porque ainda quero poder usar Uppara carregar a última entrada para que eu possa corrigi-la. Eu poderia fazer a correção e, em seguida, excluir a penúltima entrada do histórico, mas isso parece desajeitado e é particularmente irritante para um comando de longa duração, pois eu precisaria lembrar de executar etapas extras posteriormente ou precisaria suspender temporariamente faça isso, execute essas etapas e continue.
O que eu quero:
Idealmente, o que eu gostaria de poder fazer é pressionar Up, fazer uma correção no meu comando anterior e pressionar alguma combinação de teclas especial ou adicionar algum token mágico à linha de comando para fazer com que ela substitua a entrada do histórico quando executada.
Também aceitável seria pressionar alguma outra sequência de teclas para recuperar e editar um comando do histórico (semelhante a Ctrl+R) que substitui a entrada do histórico quando executado.
Uma função de shell robusta que remove a penúltima entrada do histórico seria tolerável, mas não ideal.
Imagino que certamente outras pessoas também cometem erros de digitação e ficam igualmente irritadas quando tais comandos poluem sua história. O que outras pessoas fazem?
Opção nº 1 - Manualmente
Eu simplesmente abriria o
~/.bash_history
arquivo em um editor comovim
e faria as alterações necessárias nesse arquivo e salvaria.Antes de editá-lo, certifique-se de que seu histórico de terminais atual também esteja comprometido com este arquivo:
Tenha em mente que seu arquivo de histórico está localizado onde quer que esta variável de ambiente esteja apontando:
Opção nº 2 - HSTR
Existe uma ferramenta CLI chamada HSTR que você pode usar para gerenciar seu
~/.bash_history
arquivo de maneira mais sistemática. O site principal do HSTR eram vídeos e bons detalhes sobre como usá-lo.Ele também menciona esta sinopse:
Consulte os documentos completos para saber mais sobre isso: DOCUMENTAÇÃO HSTR .
Referências
O HSTR parecia atraente, mas acabou sendo um pouco pesado demais para o meu gosto.
Em vez disso, escrevi minha própria função bash:
Então agora posso executar
historysub TYPO CORRECTION
para reexecutar um comando com uma correção. Não é tão bom quanto editar interativamente o comando antigo, mas acho que deve ser bom o suficiente para minhas necessidades.