salve o histórico do bash regularmente

salve o histórico do bash regularmente

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 -wgravar 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.

https://unix.stackexchange.com/questions/697314/any-way-to-resolve-export-prompt-command-history-a-and-histcontrol-ignored/720637#720637

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.

informação relacionada