Por alguma razão, não consigo fazer com que meu sistema mantenha meu histórico do BASH após uma reinicialização. Aqui estão as seções relevantes do meu ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Tanto quanto posso dizer, essas são todas as opções necessárias (eu sei que costumava manter o histórico em várias reinicializações sem todas elas no passado). No entanto, apesar de ter adicionado essas opções várias reinicializações atrás, ainda perco a maior parte do meu histórico após uma reinicialização. Não está vazio, mas não possui as 9999 linhas que eu tinha antes de reiniciar.
Antes que alguém reclame, sim, eu li essas perguntas. Eu implementei algumas de suas sugestões, conforme listado acima, o restante foi inútil ou não relevante:
- Perda de histórico de bash ao usar histappend
- Como impedir que o Bash altere o histórico?
- O que determina o que aparece no comando bash history?
- Como mantenho meu histórico do bash nas sessões?
- salvar o histórico do bash, regularmente
Com a chance de haver outros comandos relevantes, você pode ver todo o meu ~/.bashrc
aqui .
Então, o que estou perdendo? Por que minha história não é salva? Se alguém achar que outro arquivo pode ser relevante, informe-me e eu o publicarei. Eu verifiquei executando grep -i hist \.*
no meu $HOME
que mostrou que o único .
arquivo relevante contendo a string hist
ou HIST
era .bashrc
.
Estou executando o Linux Mint Debian Edition, GNU bash, versão 4.2.36 (1) -release (x86_64-pc-linux-gnu) e meu emulador de terminal favorito (caso isso seja relevante) é terminator
.
ATUALIZAR:
Seguindo a sugestão do @ mpy nos comentários, mudei meu ~/.bashrc
para definir HISTFILE=~/bash_history
em oposição ao padrão ~/.bash_history
e isso parece resolver o problema de shells interativos . Os shells de logon ainda exibem o mesmo comportamento, com o histórico truncado nas 500
linhas. No entanto, não há HIST
variáveis relacionadas definidas nos arquivos relevantes:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
Então, por que é a criação HISTSIZE
e HISTFILESIZE
no ~/.bashrc
não é suficiente, a menos que explicitamente definir o $HISTFILE
para algo diferente do padrão ~/.bash_history
?
history
comando, a saída que você vê é idêntica à que você vê, executando cat .bash_history
, além dos números de linha? Quero dizer, o history
comando lista os carimbos de hora ou outras informações? A razão pela qual estou perguntando é: se você vê essas coisas esotéricas, significa que há outro módulo / função / programa, que está mexendo com o histórico do shell e uma versão errada ou com erros do que quer que seja, pode estar causando sofrimento. .
;)
: tente outro arquivo como HISTFILE, não o padrão ~/.bash_history
. Explicação muito construída: Eu assumo que bash é seu shell padrão, portanto, ao iniciar o sistema, um shell não interativo é o pai da sua sessão X (eu também presumo que você use X), que não saberá nada sobre a opção histappend (como .bashrc é apenas lido por shells interativos), desde que esse shell pai funcione, tudo está bem, mas após o término (ou seja, parada do sistema), ele substitui ~/.bash_history
(que é o padrão) e atrapalha o seu histórico ...