Depois de várias iterações grandes e feias e casos extremos estranhos ao longo dos anos, agora tenho uma seção concisa do meu .bashrc dedicado a isso.
Primeiro, você deve comentar ou remover esta seção do seu .bashrc (padrão para Ubuntu). Caso contrário, determinados ambientes (como screen
sessões em execução ) ainda truncarão seu histórico:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Segundo, adicione isso na parte inferior do seu .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Nota: todos os comandos são gravados imediatamente após a execução; portanto, se você colar acidentalmente uma senha, não poderá simplesmente "matar -9 %%" para evitar a gravação do histórico, será necessário removê-la manualmente.
Observe também que cada sessão do bash carregará o arquivo de histórico completo na memória, mas mesmo se o arquivo de histórico aumentar para 10 MB (o que levará muito, muito tempo), você não notará muito efeito no tempo de inicialização do bash.