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, historyrestituisce un elenco di 10 comandi. Tuttavia, se ci si disconnette e quindi si accede nuovamente, historyverranno restituiti solo 5 comandi perché HISTFILESIZEè impostato su 5. Questo perché, una volta usciti dalla sessione, le HISTFILESIZErighe della cronologia vengono salvate nel file della cronologia ( ~/.bash_historyper impostazione predefinita, ma controllate da HISTFILE). In altre parole, i comandi vengono aggiunti HISTFILEfino a quando non raggiungono le $HISTFILESIZElinee 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_profilese quel file esiste). Non impostarli nel tuo ~/.bashrcprimo 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 , dfo duessere ignorato e non salvato nella tua cronologia.
HISTCONTROL: Questo ti consente di scegliere come funziona la cronologia. Personalmente, l'ho impostato su HISTCONTROL=ignoredupsquale causa il salvataggio dei comandi duplicati una sola volta. Altre opzioni sonoignorespace ignorare i comandi che iniziano con uno spazio bianco e erasedupsciò 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' histappendopzione 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 historycomando 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.