Como se proteger contra a eliminação do histórico bash?

5

Após a resposta :

When closing multiple bash instances at the same time, there is a known race condition that may cause the history to be cleared. This occurs because there is no locking used when the bash history file is written.

Como posso evitar essa causa da limpeza do histórico bash?

Eu uso o i3wm e acho que isso acontece principalmente quando eu desligo o computador antes de fechar manualmente urxvt terminais. O comando usado (via keybind) para o desligamento é systemctl poweroff .

    
por kravemir 13.03.2015 / 19:51

1 resposta

2

A origem da condição de corrida é porque o bash apenas grava o arquivo de histórico à medida que o shell é encerrado. Além disso, será gravado o arquivo de histórico existente se vários shells estiverem sendo executados, somente o último a sair dominará o histórico.

Portanto, uma solução é escrever o histórico depois de TODOS os comandos. Há ou algumas conseqüências negativas para isso, como, por exemplo, você poderá realizar eventos de histórico de seta ocorrendo em outras janelas e, portanto, expor a todos os shells abertos (que você possui) os comandos que você acabou de executar. O lugar mais provável para isso é se você estiver executando um conjunto repetitivo de comandos, como 'seta para cima N vezes, e pressione enter' repetidas vezes. Se, em uma janela fechada, um processo em segundo plano terminar, então, de repente, você precisará prestar mais atenção a que comando está realmente 'seta para cima N + 1 vezes' arriscando-se a executar o comando errado.

Para ativar "o histórico em cada comando", tente adicioná-los a você .bashrc (o número de linhas de histórico a serem armazenadas são apenas exemplos, você pode alterá-las para o seu conforto)

HISTFILESIZE=400000000
HISTSIZE=10000
PROMPT_COMMAND="history -a"
export HISTSIZE PROMPT_COMMAND

shopt -s histappend
    
por 13.03.2015 / 21:35