Bash perda de histórico ao usar histappend

15

Gosto de manter muito histórico, por isso tenho histappend definido no meu .bashrc . Na maioria das vezes, tudo funciona bem, com a história construída a partir de muitos anexos. No entanto, de vez em quando, eu inicio um novo shell e descubro que perdi o histórico inteiro - e ele geralmente contém apenas alguns dos comandos do último shell para sair (ou seja, não é apenas sobrescrever em vez de anexar). ). Por causa disso, desconfio que esteja ocorrendo na saída do shell, em vez de em algum outro processo que esteja matando o arquivo .bash_history . Apoiando essa conclusão, eu tenho números de comando de histórico no meu prompt, e nunca os vi saltar.

Alguém já se deparou com um problema semelhante? Ou até mesmo ter sugestões de como rastrear o problema?

    
por Cascabel 11.08.2009 / 03:24

4 respostas

12

Desculpe responder minha própria pergunta, mas nenhuma das outras respostas realmente resolve o problema.

Eu finalmente descobri que isso só acontece ao fechar gnome-terminal (isto é, arquivo > sair, o botão 'x', alt + F4), e mesmo assim geralmente somente ao fechar vários terminais em sucessão rápida. Isso nunca acontece quando usando ctrl-D para fechar o shell, deixando o terminal seguir.

Se eu puder defini-lo bem o suficiente, arquivei um relatório de bug do gnome-terminal. Enquanto isso, talvez isso ajude outras pessoas que chegam do google!

    
por 06.10.2009 / 23:33
9

Não sei por que isso acontece, mas talvez você possa contornar o problema forçando o bash a gravar em seu arquivo de histórico toda vez que ele exibir um aviso:

PROMPT_COMMAND="history -a; history -n"

Isto irá escrever (-a) e então reler (-n) o arquivo de histórico toda vez que bash solicitar o próximo comando. Benefício adicional: você obterá o comando X no shell 1 no histórico do shell 2.

    
por 11.08.2009 / 07:35
3

Minha experiência foi que os shells atualizaram o arquivo de histórico no momento da saída. Assim, a "história" inicial de uma concha dependia da visão da história mais recentemente retirada da concha.

O resultado disso é que você pode obter comandos indo e vindo do histórico, dependendo de como os outros shells começaram e pararam.

    
por 11.08.2009 / 04:41
1

Eu já vi isso acontecer antes, mas era um problema com erros de disco que estavam ocorrendo com frequência crescente. Eu iria executar uma varredura na unidade. Se a unidade estiver bem, eu verificaria se esse arquivo não está ultrapassando um limite de histórico de shell arbitrário.

Algo que pode impedir que isso aconteça seria manter o arquivo podando 80 linhas ou quantos comandos você quiser que o histórico seja.

    
por 11.08.2009 / 03:31

Tags