Aviso: Esta não é uma resposta à pergunta apresentada, mas sim uma sugestão para uma abordagem que pode ser útil.
Eu sinto sua dor. Eu gosto de manter em torno do meu histórico Bash, e ser capaz de lembrar comandos que eu poderia ter corrido há muito tempo. Eu desenvolvi uma abordagem que me permite manter todo o meu histórico Bash dentro de um tamanho histórico razoável.
-
minhas configurações do histórico de Bash são:
HISTCONTROL=ignoreboth:erasedups HISTIGNORE="?:??:???:$HISTIGNORE"
Isso ajuda a manter inativas as entradas que acabam no histórico de Bash. Comandos como
ls
são mais curtos para digitar do que para recuperar, então não há sentido em armazená-los (é para isso queHISTIGNORE
serve).ignoreboth
é uma abreviação deignorespace
eignoredups
. O primeiro impede que as entradas com um espaço à esquerda acabem no histórico. Eu o uso para comandos que sei que nunca vou lembrar, ou nunca quero lembrar, comorm -rf *
:). Há muito mais coisas que eu ignoro por padrão (não mostrado), o que mantém o tamanho do histórico. -
Apesar das contramedidas acima, as duplicatas ainda acabam no meu histórico (por exemplo, devido a vários shells do Bash abertos ao mesmo tempo). Eu tenho um contador no meu prompt que me mostra o tamanho do histórico atual
PS1='\u@\h:\w:\!> '
(O código relevante é
\!
, a.k.a. número histórico deste comando .) Isso me mostra quando é hora de 'limpar' (veja o próximo passo). -
Periodicamente, "limpo" meu histórico de Bash executando o seguinte comando:
tac ~/.bash_history | awk '!seen[$0]++' | tac > ~/.bash_history.new && mv ~/.bash_history.new ~/.bash_history
(presumindo que seu histórico de Bash está armazenado em ~/.bash_history
, claro). Este comando remove as duplicatas enquanto respeita a ordem: os comandos usados pela última vez permanecem por último. Somente a última (mais recente) duplicata é mantida.
Com essa abordagem, consegui manter todo o meu histórico Bash em um tamanho de história muito modesto de 600 a 1000 entradas.