O erasedups
deve fazer o que você quer com relação às duplicatas - apenas note que a eliminação de duplicatas é acionada no momento de anexar uma nova entrada ao histórico e que apaga todas as ocorrências antigas de um comando, deixando apenas o mais recente.
Respondendo a pergunta " Como posso ter o histórico exatamente como é antes de sair? "
Do jeito que eu vejo, isso pode ser útil apenas de vez em quando. (Caso contrário, por que você usaria a história?) Você pode fazer isso emitindo
history -c; history -r
Isso limpa todas as entradas de histórico mantidas atualmente na memória e, em seguida, relê todo o histórico do arquivo histórico. Portanto, todos os comandos que você emitiu desde o login na sessão atual do shell são esquecidos. Acho bastante útil em situações em que faço muitos testes (muitos comandos semelhantes, mas não são realmente duplicados) e, em seguida, não quero ter meu histórico roubado por isso - então eu tenho um alias para ele em meu .bashrc
:
alias hrr='history -c; history -r'
( hrr
deve ser lembrado como "releitura da história").