Por padrão, o arquivo de histórico é lido apenas ao inicializar e é gravado somente ao sair. Como resultado, se você inicializar vários shells ao mesmo tempo, somente o histórico do último a sair será preservado. O histórico gerado a partir do resto será sobrescrito.
Existem algumas maneiras de ajustar esse comportamento. Uma é adicionando shopt -s histappend
ao seu .bashrc. Esta opção fará com que o arquivo de histórico seja anexado ao invés de sobrescrito na saída do shell.
Você pode ajustar ainda mais esse comportamento fazendo o bash executar um acréscimo após cada comando, adicionando o seguinte à sua variável de ambiente PROMPT_COMMAND
em .bashrc
: export PROMPT_COMMAND="history -a;"
. Isso faz com que o comando history -a
seja executado toda vez que um prompt for impresso.
Ao usar os dois ajustes acima, o arquivo do histórico bash será continuamente anexado a cada um dos seus shells, não importa quantos estejam abertos. A única ressalva é que cada uma dessas shells não verá os comandos executados pelas outras shells, já que o arquivo de histórico é lido apenas na inicialização. Você pode tentar ler manualmente essas entradas no histórico atual de shells chamando history -n
, mas eu já vi algumas esquisitices ao fazer isso com vários shells constantemente anexando. Pise com cuidado se você tentar automatizar isso e se importar profundamente com sua história.