Aggiungi questo al tuo .bashrc
(Linux) o .bash_profile
(Mac OS):
export HISTFILESIZE=
export HISTSIZE=
Ecco qua, storia illimitata. Attualmente ho 27000 voci :)
Da man bash
:
Se
HISTFILESIZE
non è impostato, non viene eseguito alcun troncamento.
Ciò significa .bash_history
non viene mai troncato
Lo stesso sembra valere anche per HISTSIZE
, anche se non sono riuscito a trovarlo documentato.
Un'altra bella funzionalità che proverò è questa:
Se
HISTTIMEFORMAT
variabile è impostata, i timestamp vengono scritti nel file della cronologia, contrassegnati con il carattere del commento della cronologia, in modo che possano essere conservati tra le sessioni della shell, come il seguente:
export HISTTIMEFORMAT="%F %T "
Fammi sapere se l'hai già provato...
(ripubblicando la mia risposta da https://stackoverflow.com/a/19533853/128597)
Dopo molte grandi e brutte iterazioni e strani casi limite nel corso degli anni, ora ho una sezione concisa del mio .bashrc dedicata a questo.
Innanzitutto, devi commentare o rimuovere questa sezione del tuo .bashrc (impostazione predefinita per Ubuntu). In caso contrario, alcuni ambienti (come l'esecuzione di screen
sessioni) troncheranno comunque la tua cronologia:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Secondo, aggiungi questo in fondo al tuo .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Nota:ogni comando viene scritto immediatamente dopo essere stato eseguito, quindi se incolli accidentalmente una password non puoi semplicemente "uccidere -9 %%" per evitare la scrittura della cronologia, dovrai rimuoverla manualmente.
Si noti inoltre che ogni sessione bash caricherà in memoria l'intero file della cronologia, ma anche se il file della cronologia cresce fino a 10 MB (il che richiederà un lungo, lungo time) non noterai un grande effetto sul tempo di avvio di bash.
Includi in ~/.bashrc :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Questa risposta soddisfa i seguenti criteri:
-
una cronologia principale separata (nessuna sessione può interrompere la tua cronologia)
-
scrittura automatica della cronologia (senza tasti di scelta rapida)
-
scritture poco frequenti (nessuna aggiunta dopo ogni comando)
sfondo
All'avvio interattivo, se $HISTFILESIZE
è impostato su un numero, bash tronca $HISTFILE
a quel numero. Alla chiusura interattiva, se l'opzione shell histappend
è impostato, bash aggiunge $HISTSIZE
righe fino a $HISTFILE
, altrimenti sovrascrive $HISTFILE
.
suggerimenti per OSX (terminale)
Ogni volta che viene creata una scheda in Terminale, ~/.bash_profile
viene letto, il che significa che bash non continua a leggere il tuo ~/.bashrc
. Aggiungi la seguente riga al tuo ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
suggerimenti per lo schermo
Se usi screen, il tuo file di configurazione è ~/.screenrc. Se vuoi che lo schermo registri la cronologia, devi solo impostarlo in modo da utilizzare una shell di login che genererà i tuoi file di avvio di bash (e registrerà la tua cronologia).
# use bash, make it a login shell
defshell -bash