Esistono due variabili che controllano le dimensioni della cronologia:
HISTFILESIZE Il numero massimo di righe contenute nel file cronologico. Quando a questa variabile viene assegnato un valore, il file cronologico viene troncato, se necessario, per contenere non più di quel numero di righe rimuovendo le voci più vecchie. Anche il file della cronologia viene troncato a questa dimensione dopo averlo scritto quando esce una shell. Se il valore è 0, il file della cronologia viene troncato a zero. Valori non numerici e valori numerici inferiori a zero inibiscono il troncamento. La shell imposta il valore predefinito sul valore di HISTSIZE dopo aver letto i file di avvio.
e
HISTSIZE Il numero di comandi da ricordare nella cronologia dei comandi (vedi STORIA di seguito). Se il valore è 0, i comandi non vengono salvati nell'elenco cronologico. Valori numerici inferiori a zero determinano il salvataggio di ogni comando nell'elenco cronologico (non vi sono limiti). La shell imposta il valore predefinito su 500 dopo aver letto tutti i file di avvio.
Queste due variabili ti consentono di controllare il comportamento della tua storia. Fondamentalmente, HISTSIZE
è il numero di comandi salvati durante la sessione corrente ed HISTFILESIZE
è il numero di comandi che verranno ricordati tra le sessioni. Quindi, per esempio:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
Nell'esempio sopra, perché HISTSIZE
è impostato su 10, history
restituisce un elenco di 10 comandi. Tuttavia, se ci si disconnette e quindi si accede nuovamente, history
verranno restituiti solo 5 comandi perché HISTFILESIZE
è impostato su 5. Questo perché, una volta usciti dalla sessione, le HISTFILESIZE
righe della cronologia vengono salvate nel file della cronologia ( ~/.bash_history
per impostazione predefinita, ma controllate da HISTFILE
). In altre parole, i comandi vengono aggiunti HISTFILE
fino a quando non raggiungono le $HISTFILESIZE
linee in quel punto, ogni riga successiva aggiunta significa che il primo comando del file verrà rimosso.
Puoi impostare i valori di queste variabili nel tuo ~/.profile
(o ~/.bash_profile
se quel file esiste). Non impostarli nel tuo ~/.bashrc
primo perché non ci sono attività impostate lì e in secondo luogo perché ciò comporterebbe un comportamento diverso nelle shell di login rispetto a quelle non di accesso che possono causare altri problemi .
Altre variabili utili che ti consentono di mettere a punto il comportamento della tua storia sono:
HISTIGNORE
: Ciò consente di ignorare alcuni comandi comuni che raramente sono di interesse. Ad esempio, è possibile impostare:
export HISTIGNORE="pwd:df:du"
Ciò causerebbe qualsiasi comando che inizia con pwd
, df
o du
essere ignorato e non salvato nella tua cronologia.
HISTCONTROL
: Questo ti consente di scegliere come funziona la cronologia. Personalmente, l'ho impostato su HISTCONTROL=ignoredups
quale causa il salvataggio dei comandi duplicati una sola volta. Altre opzioni sonoignorespace
ignorare i comandi che iniziano con uno spazio bianco e erasedups
ciò fa sì che tutte le righe precedenti corrispondenti alla riga corrente vengano rimosse dall'elenco cronologico prima che la riga venga salvata. ignoreboth
è una scorciatoia per ignorespace e ignoredups.
HISTTIMEFORMAT
: Ciò consente di impostare il formato dell'ora del file della cronologia. Vedi la risposta di Pandya o leggiman bash
per i dettagli.
Per un'ulteriore messa a punto, hai:
L' histappend
opzione bash. Questo può essere impostato eseguendoshopt -s histappend
o aggiungendo quel comando al tuo ~/.bashrc
. Se questa opzione è impostata
l'elenco della cronologia viene aggiunto al file indicato dal valore della variabile HISTFILE all'uscita della shell, anziché sovrascrivere il file.
Questo è molto utile in quanto consente di combinare le storie di sessioni diverse (ad esempio pensare a terminali diversi).
Il history
comando ha due opzioni utili:
Ad esempio, potresti aggiungere questi due comandi al tuo PROMPT_COMMAND
(che viene eseguito ogni volta che la shell mostra il prompt, quindi ogni volta che avvii una nuova shell e dopo ogni comando che esegui in essa):
export PROMPT_COMMAND='history -a;history -r;'
Combinati, assicurano che qualsiasi nuovo terminale che apri importerà immediatamente la cronologia di qualsiasi altra sessione di shell. Il risultato è una storia comune in tutti i terminali / sessioni di shell.