Impossibile aumentare la lunghezza della cronologia della shell bash di Mac OSX


26

Ho impostato ~ / .bash_profile qualche tempo fa per avere più di 500 righe ma sembra che il sistema non riesca a capirlo.

Sai perché?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500

Risposte:


34

Devi anche impostare HISTSIZE=10000000.

HISTFILESIZEdetermina il numero di righe da conservare nel file cronologico mentre HISTSIZEdetermina il numero di righe da conservare in memoria. Entrambi predefiniti a500

Eseguire echo $HISTFILESIZE $HISTSIZEprima di apportare la modifica e poi di nuovo dopo. Dovresti vedere 10000000 500prima poi 10000000 10000000dopo.


16

È necessario esportare HISTSIZE e HISTFILESIZEle variabili di ambiente nel ~/.bash_profilefile.

Aggiungi le seguenti righe nel tuo ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000

9

Risposta:

Tutto quello che devi fare è impostare HISTSIZEnel tuo profilo bash ( ~/.bash_profile). Puoi lasciare HISTFILESIZE non impostato . Ciò configurerà sia la cronologia in memoria che la cronologia basata su file.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Spiegazione, informazioni aggiuntive.

Il problema è HISTFILESIZE imposta solo la cronologia massima memorizzata su file all'avvio di una sessione. HISTSIZE è ciò che determina quante righe vengono salvate alla fine di una sessione. Se HISTFILESIZE è più grande di HISTSIZE, non vedrai mai più di HISTSIZE perché il file viene sovrascritto con i comandi HISTSIZE (a meno che tu non imposti la cronologia da aggiungere, ma questo è un argomento separato: cerca histappendnei comandi integrati della shell per quello) .

Questo è il motivo per cui non vedi alcun effetto. Con HISTSIZE predefinito (probabilmente 500) il tuo file cronologico viene sempre sovrascritto dai più recenti comandi $ HISTSIZE. Tutto ciò che è più vecchio (che potrebbe potenzialmente far crescere l'elenco oltre $ HISTSIZE) viene cancellato.

Nella maggior parte dei casi non è necessario impostare HISTFILESIZE indipendentemente da HISTSIZE.

HISTSIZE determina quante righe verranno scritte nel file della cronologia. L'elenco dei comandi viene troncato all'uscita, prima di scrivere nel file della cronologia, mantenendo N le righe più recenti. Per impostazione predefinita, questo elenco sovrascrive il file cronologico.

HISTFILESIZE determina la dimensione del file della cronologia (in righe). Il file viene troncato all'avvio, mantenendo N le righe più recenti. Inoltre, il file cronologico viene potenzialmente troncato ogni volta che viene impostato HISTFILESIZE.

Infine, sebbene sembri non documentato, BASH imposta HISTFILESIZE in base a HISTSIZE se HISTSIZE è impostato all'avvio. L'ho provato su macOS e alcune varietà di Ubuntu e il comportamento è coerente. Se imposti HISTSIZE in un file di avvio ( non tramite la riga di comando in alcun modo), HISTFILESIZE verrà impostato in modo che corrisponda. (Provalo tu stesso: imposta HISTSIZE su un valore arbitrariamente grande in .bash_profile, esci e avvia un nuovo terminale, quindi echo $HISTSIZE $HISTFILESIZEli troverai corrispondenti.)

Di conseguenza, non c'è motivo di toccare HISTFILESIZE a meno che non si desideri valori diversi e i casi d'uso con valori diversi sono rari (e in genere comportano più impostazioni di personalizzazione della cronologia per ottenere qualcosa di utile).


Hai ragione Zim. Il codice sorgente di Bash mostra che imposterà HISTFILESIZE su HISTSIZE se HISTFILESIZE non è impostato. git.savannah.gnu.org/cgit/bash.git/tree/…
robert
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.