Per qualche motivo, non riesco a far sì che il mio sistema mantenga la mia cronologia BASH dopo un riavvio. Ecco le sezioni rilevanti del mio ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Per quanto ne so, queste sono tutte le opzioni necessarie ( so di essere stata in grado di conservare la cronologia attraverso più riavvii senza tutte queste in passato). Tuttavia, nonostante abbia aggiunto queste opzioni diversi riavvii, dopo un riavvio perdo ancora gran parte della mia storia. Non è vuoto, ma non ha le 9999 righe che avevo prima di riavviare.
Prima che qualcuno si lamenti, sì, ho letto queste domande. Ho implementato alcuni dei loro suggerimenti come elencato sopra, il resto era inutile o non pertinente:
- Perdita della cronologia di Bash durante l'utilizzo di histappend
- Come impedire a Bash di modificare la cronologia?
- Cosa determina ciò che appare nel comando cronologia bash?
- Come posso conservare la mia cronologia bash attraverso le sessioni?
- salva la storia di bash, regolarmente
Se non ci sono altri comandi pertinenti lì dentro, puoi vedere il mio intero ~/.bashrc
qui .
Quindi, cosa mi sto perdendo? Perché la mia cronologia non è stata salvata? Se qualcuno pensa che un altro file possa essere pertinente, fammelo sapere e lo posterò. Ho controllato eseguendo grep -i hist \.*
nel mio $HOME
che ha mostrato che l'unico .
file rilevante contenente la stringa hist
o HIST
era .bashrc
.
Sto usando Linux Mint Debian Edition, GNU bash, versione 4.2.36 (1) -release (x86_64-pc-linux-gnu) e il mio emulatore di terminale preferito (nel caso sia rilevante) è terminator
.
AGGIORNARE:
Seguendo il suggerimento di @ mpy nei commenti, ho cambiato il mio ~/.bashrc
in HISTFILE=~/bash_history
contrapposto al default ~/.bash_history
e questo sembra risolvere il problema per le shell interattive . Le shell di accesso mostrano ancora lo stesso comportamento, con la cronologia troncata a 500
righe. Tuttavia, non ci sono HIST
variabili correlate impostate nei file pertinenti:
$ 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
Quindi, perché l'impostazione HISTSIZE
e HISTFILESIZE
nel ~/.bashrc
non basta a meno che non abbia impostato esplicitamente $HISTFILE
qualcosa di diverso da quello predefinito ~/.bash_history
?
history
comando, l'output che vedi è identico a quello che vedi, in esecuzione cat .bash_history
, diverso dai numeri di riga? Intendo il history
comando elenca i timestamp o altre informazioni? Il motivo per cui ti sto chiedendo è che, se vedi queste cose esoteriche, significa che c'è un altro modulo / funzione / programma, che sta facendo confusione con la cronologia della shell e una versione errata o errata di qualunque cosa sia, potrebbe causarti il dolore .
;)
: prova un altro file come HISTFILE, non quello predefinito ~/.bash_history
. Spiegazione molto costruita: suppongo che bash sia la shell predefinita, quindi all'avvio del sistema una shell non interattiva è il genitore della sessione X (suppongo anche che tu usi X), che non saprà nulla sull'opzione histappend (poiché solo .bashrc letto da shell interattive), quindi finché questa shell genitore esegue tutto va bene, ma al termine (cioè arresto del sistema) sovrascriverà ~/.bash_history
(che è l'impostazione predefinita) e