Lo stesso comando è elencato più volte nella mia cronologia. Come posso evitarlo? So che è possibile tramite HISTCONTROL
ma non ho trovato la strada giusta.
Lo stesso comando è elencato più volte nella mia cronologia. Come posso evitarlo? So che è possibile tramite HISTCONTROL
ma non ho trovato la strada giusta.
Risposte:
Dalla bash
pagina man:
HISTCONTROL
Un elenco di valori separato da due punti che controlla il modo in cui i comandi vengono salvati nell'elenco della cronologia. Se l'elenco di valori include
ignorespace
, le righe che iniziano con un carattere spazio non vengono salvate nell'elenco cronologico. Un valore diignoredups
fa sì che le righe corrispondenti alla voce della cronologia precedente non vengano salvate. Un valore diignoreboth
è una scorciatoia perignorespace
eignoredups
. Un valore dierasedups
fa sì che tutte le righe precedenti corrispondenti alla riga corrente vengano rimosse dall'elenco cronologico prima che la riga venga salvata. Qualsiasi valore non presente nell'elenco precedente viene ignorato. Se HISTCONTROL non è impostato o non include un valore valido, tutte le righe lette dal parser della shell vengono salvate nell'elenco cronologico, soggetto al valore di HISTIGNORE. La seconda e le successive righe di un comando composto su più righe non vengono testate e vengono aggiunte alla cronologia indipendentemente dal valore di HISTCONTROL.
Quindi inserisci la seguente riga nel tuo ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
maggior parte del tempo che avrebbe funzionato se .bashrc è modificato, ma non è questo il caso tutto il tempo.
source ~/.bashrc && source ~/.bash_profile
Attaccalo nel tuo ~/.bashrc
:
export HISTCONTROL=ignoredups
Invece potresti usare ignoreboth
. Questo è una scorciatoia per entrambi ignorespaces
(comandi che iniziano con spazi) e ignoredups
(duplicati).
Preferisco ignoredups
da solo perché trovo il comportamento predefinito di ignorare i comandi con spazi nella parte anteriore abbastanza fastidioso quando copio un comando da un sito Web e non viene salvato perché l'ho copiato accidentalmente anche in uno spazio .... Ma a ognuno il proprio.
ignoredups
causa le righe che corrispondono alla voce della cronologia precedente non vengono salvate . Rimuove solo linee identiche consecutive.
Inserendo questo ~/.bashrc
si applica la soluzione di @ alvin in diverse sessioni come wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
e il tuo no? Qual è la differenza? Funziona per me senza esportazione, sono solo curioso
export
, la variabile è disponibile per i sottoprocessi. stackoverflow.com/q/1158091/552621 Nel caso di HISTCONTROL
, PROMPT_COMMAND
ecc., queste variabili vengono utilizzate dalla shell stessa, quindi forse non è necessario esportarle (nei processi secondari).
export HISTCONTROL=erasedups
Registrare in modo univoco ogni nuovo comando è complicato. Per prima cosa devi aggiungere
~/.profile
o simili:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Quindi devi aggiungere a ~/.bash_logout
:
history -a
history -w