Eu configurei o bash para salvar o histórico em um arquivo. Isso acontece sempre que o bash sai [corretamente]. Como às vezes o bash não sai corretamente, o histórico é perdido.
Então a questão é: posso configurar o bash para salvar o histórico com mais regularidade?
Estou executando o Debian Gnu (versão 6, Squeeze) com um kernel Linux.
versão bash: GNU bash, versão 4.1.5(1)-release (i486-pc-linux-gnu)
Responder1
salve isso em seu bash_profile ou bashrc
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Responder2
Decidi usar export PROMPT_COMMAND='history -a'
no meu .bash_aliases que grava da lista de histórico na memória para o arquivo de histórico a cada prompt. Tive alguns problemas com desduplicação, mas foram resolvidos. Recorri também ao uso de cron.daily e mensal para fazer backup do arquivo. Se o terminal for interrompido sem sair, ele não será salvo. Mesmo prender a saída não funcionará. Infelizmente, o cron job também não pode salvar a lista de histórico, que está armazenada na memória. Não consegui encontrar uma maneira de enviar um comando para o shell em execução no momento para history -w
gravar da lista para o arquivo. Isso poderia ser usado, mas teria que haver um separado para cada shell aberto em uma guia se alguém quisesse manter o trabalho separado. Caso contrário, há outro link que discute como escrever em cada prompt e ao mesmo tempo desduplicar.
Responder3
É possível que seu $HISTFILE pertença ao root. Supondo que você esteja usando o bash como seu shell de login. Veja como verificar:
$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history
O padrão para HISTFILE deve ser ~/.bash_history, se você vir o erro "precisa definir HISTFILE" ou se $HISTFILE não for ~/.bash_history, então você deve verificar ~/.profile ou ~/.bash_profile ou ~/. bashrc para ter certeza de que não está sendo configurado ou redefinido incorretamente.
Normalmente, ele pertence apenas ao root, então basta redefini-lo:
$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history
Saia e faça login.
$ history
Deve mostrar o último conjunto de comandos inseridos antes do arquivo pertencer ao root, seguido pelos comandos inseridos após a alteração da propriedade do arquivo.