Uso più terminali Konsole. E voglio che tutti i comandi che scrivo in ogni terminale vengano salvati nella cronologia dei comandi, in modo che la prossima console che apro li abbia tutti. Per evitare che ogni terminale sovrascriva la cronologia dei comandi dell'altro terminale, nel mio ho fornito le seguenti impostazioni.bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
Ho dato l'ultima riga per vedere il numero del comando nel mio prompt. Il comando n. non è mai andato oltre i 600, ma alcuni dei miei vecchi comandi stanno scomparendo dalla storia. Esistono molti comandi che vengono dati ripetutamente, ma come previsto da ignoredups
, non aumenta mai il comando no nel prompt. Eppure i vecchi comandi stanno ancora scomparendo e il numero di comandi nella storia rimane sempre leggermente più di 500.
Il .bash_history
file contiene ancora molti duplicati nonostante ignorati.
PS: l'output di eco $HISTSIZE
e $HISTFILESIZE
sono entrambi=1000
Aggiornamento: ho riscontrato il problema nella voce precedente a .bashrc
. Basta chiamare history -a
in PROMPT_COMMAND
semplicemente aggiunge l'ultimo nuovo comando al .bash_history. Quindi il ignoredups
e erasedups
non hanno alcun effetto.
Esiste un modo, posso ancora scrivere su .bash_history senza duplicati da ogni terminale? Non voglio caricare l'intera cronologia ad ogni prompt dei comandi history -r
e riscriverla di nuovo history -w
, perché i comandi che ho emesso in un terminale appariranno anche in un altro terminale in esecuzione parallelo. Voglio che i comandi combinati appaiano solo in un nuovo terminale.
Il puzzle, il motivo per cui la mia storia è stata ridotta a 500, è risolto. Ho notato che è successo ogni volta che ho usato questa macchina. La creazione di a .bash_profile
con la seguente voce ha risolto questo problema.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Ora il mio .bashrc viene eseguito ogni volta che anch'io ssh. E la dimensione del file della cronologia ora sta aumentando monotonicamente.
bug-bash
mailing list un anno dopo questa domanda è stata pubblicata: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.html