Bash History illimitato [chiuso]


350

Voglio che il mio .bash_historyfile sia illimitato. es. Quindi posso sempre tornare indietro e vedere come ho creato / configurato qualcosa, o che cosa era quel comando ingegnoso, o come un comando ha rotto qualcosa settimane fa. Come posso modificare questa impostazione?



1
Bash è un linguaggio di programmazione e non si tratta di programmazione?
NeilG

Risposte:


307

Impostare HISTSIZEe HISTFILESIZEin .bashrc su una stringa vuota:

HISTSIZE= 
HISTFILESIZE=

In bash 4.3 e versioni successive puoi anche usare HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(export PROMPT_COMMAND = 'history -a') può scaricare i comandi per cancellare immediatamente la cronologia.
Cruelcage,

3
L'impostazione HISTSIZE= HISTFILESIZE=porta a disabilitare completamente la cronologia di bash, almeno per me.
Philipp Ludwig,

5
L'impostazione di @PhilippLudwig ha HISTSIZE=-1 HISTFILESIZE=-1disabilitato la mia storia, mentre ha HISTSIZE= HISTFILESIZE=fatto il trucco. CentOS 7 qui.
Seether,

1
@PhilippLudwig Penso che HISTSIZE= HISTFILESIZE=non dovrestiexport HISTSIZE= export HISTFILESIZE=
Matzz,

3
@Seether La risposta indica chiaramente "In bash 4.3 e successive ...". CentOS 7 ha bash 4.2.x.
villapx,

426

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 (predefinito per Ubuntu). In caso contrario, determinati ambienti (come le screensessioni in corso ) tronceranno comunque la cronologia:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

Secondo, aggiungilo in fondo al tuo .bashrc:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://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 l'esecuzione, quindi se si incolla accidentalmente una password non è possibile "uccidere -9 %%" per evitare la scrittura della cronologia, è necessario rimuoverla manualmente.

Si noti inoltre che ogni sessione di bash caricherà il file di cronologia completo in memoria, ma anche se il file di cronologia aumenta a 10 MB (il che richiederà molto, molto tempo) non si noterà un grande effetto sul tempo di avvio di bash.


1
@AquariusPower - Prova ciò che è esattamente sopra, rendi HISTFILESIZE=e HISTSIZE=vuoto invece di -1 e assicurati di non avere altre dichiarazioni di quei parametri in un .bashrc o .bash_profile o .profile.
fotinakis,

2
colpevole .bashrc, ho avuto quella configurazione dopo su un altro file caricato da .bashrc ..., ora funziona! grazie!
Aquarius Power il

10
Aggiungilo nel mio sistema bash standard e anche l'aggiunta della cronologia attuale è buona, quindi dopo la configurazione, corricat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meillaud

2
Per conservare la cronologia, inizializza il file della cronologia con la cronologia corrente.
Arthur,

3
Mille grazie: il fatto che l' impostazione HISTFILESIZE(e possibilmente HISTSIZE) abbia effetto immediato non può essere sottovalutata .
Attie

37

Come Jörg Beyer accennato in precedenza, HISTSIZEe HISTFILESIZEsono fondamentali.

Inoltre, dovresti assolutamente dare un'occhiata alla variabile ambientale HISTCONTROL, che ti consente di fare cose interessanti come non memorizzare comandi cronologici duplicati ( HISTCONTROL=erasedups). Non ha senso avere una storia illimitata se devi navigare tra centinaia di righe cd ..o simili.

Link: qui e lavorando con la storia di Bash . Vale anche la pena di consultare le FAQ sulle variabili bash .


13
Quelle righe di cd ti danno il contesto per i comandi emessi. In realtà sono incredibilmente utili. Non riesco a capire perché qualcuno vorrebbe mai cancellarli, a meno che l'unico modo in cui tu usi mai la cronologia sia sfogliando un comando alla volta.
iconoclasta,

@simont Uso anche l'opzione ignorespace con HISTCONTROL, quindi lo uso per tutto ciò che non voglio scrivere nella cronologia, come le password.
bigtunacan,

6
Mantenere le linee in ordine è molto utile se si riutilizzano sequenze di comandi. Ad esempio Ctrl-rsomechars Ctrl-o Ctrl-o Ctrl-o Ctrl-o. Ecco perché tengo duplicati nella storia.
Stéphane Gourichon,

1
@ StéphaneGourichon a cosa serve Ctrl-o?
Ciprian Tomoiagă,

4
@ CiprianTomoiagă Ctrl-oesegue il comando al prompt e mostra subito il comando subito dopo quello precedente nella storia. Un vantaggio è che dopo aver usato Ctrl-rper trovare un vecchio comando (possibilmente usando la freccia su e giù per passare ai comandi vicini nella cronologia), è sufficiente tenere Ctrlpremuto e premere opiù volte per eseguire nuovamente una serie precedente di comandi, anche in un ciclo infinito se vuoi. Vedi anche GNU Readline - Wikipedia
Stéphane Gourichon,

22

Ci sono (almeno) due aspetti rilevanti qui:

  • HISTSIZE: il numero di voci nel file cronologico
  • HISTFILESIZE: il numero di righe nel file della cronologia

Penso che possiamo concordare sul fatto che il termine illimitato è spesso lo stesso di molto grande (o hai un archivio di file illimitato?). Quindi basta impostare valori molto grandi.


23
"Va notato che 1000000000 è uguale all'infinito solo per valori molto piccoli di infinito. - sepp2k" lol. sì, sono contento di piccoli valori di infinito (diciamo, un mese di frequente uso del terminale).
Francis Haart,

6
un mese di frequente uso terminale è una frazione infinitamente infinitamente piccola. Direi che una vita di frequente uso terminale equivale a un valore molto molto molto piccolo di infinito. Ma una vita di uso frequente del terminale è abbastanza buona per la mia storia della shell. ;)
iconoclasta il

2
Le versioni precedenti di zsh si arrestano almeno in modo anomalo se si imposta HISTSIZE e / o HISTFILESIZE su una dimensione troppo grande perché tenta di pre-allocare memoria sufficiente. Ciò è diventato rilevante quando si eseguono strumenti che usano zsh come shell (ad esempio dbx).
Brian Vandenberg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.