Come evitare voci duplicate in .bash_history

86

Lo stesso comando è elencato più volte nella mia storia. Come posso evitare questo? So che è possibile tramite HISTCONTROL ma non ho trovato la strada giusta.

    
posta karthick87 02.12.2010 - 21:05

6 risposte

97

Dalla pagina man di bash :

  

HISTCONTROL

     
    

Un elenco di valori separati da due punti che controllano il modo in cui i comandi vengono salvati     la lista della storia. Se l'elenco di valori include ignorespace , righe     che iniziano con un carattere spaziale non vengono salvati nell'elenco cronologico. UN     il valore di ignoredups fa sì che le linee che corrispondono alla voce della cronologia precedente a     non essere salvato. Un valore di ignoreboth è una scorciatoia per ignorespace e     %codice%. Un valore di ignoredups fa sì che tutte le righe precedenti corrispondano a     linea corrente da rimuovere dalla lista della storia prima che quella linea sia     salvato. Qualsiasi valore non presente nell'elenco sopra riportato viene ignorato. Se HISTCONTROL è     unset, o non include un valore valido, tutte le righe lette dalla shell     parser vengono salvati nella lista della cronologia, soggetti al valore di HISTIGNORE.     La seconda e le successive linee di un comando composto a più linee non lo sono     testato e aggiunto alla cronologia indipendentemente dal valore di HISTCONTROL.

  

Quindi inserisci la seguente riga in erasedups :

~/.bashrc

    
risposta data Isaiah 02.12.2010 - 21:09
19

Metti questo in ~/.bashrc :

export HISTCONTROL=ignoredups

Potresti invece usare ignoreboth . Questa è una scorciatoia per entrambi ignorespaces (i comandi iniziano con spazi) e ignoredups (duplicati).

Preferisco ignoredups da solo perché trovo abbastanza fastidioso il comportamento predefinito di ignorare i comandi con spazi nella parte anteriore quando copio un comando da un sito Web e non viene salvato perché ho copiato accidentalmente anche in uno spazio .... Ma a ciascuno il proprio.

    
risposta data Oli 02.12.2010 - 21:10
7

Mettendo questo in ~/.bashrc si applicherà la @ soluzione di alvin attraverso diverse sessioni come wlell

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Fonte: Linux: cronologia di Bash: impostazione "ignoredups" e "erasedups" in conflitto con la cronologia comune tra le sessioni

    
risposta data Nour Chawich 31.08.2015 - 17:44
4
export HISTCONTROL=erasedups
    
risposta data withoutasound 03.12.2010 - 03:29
3

Aggiungi quanto segue al tuo ~/.bashrc :

export HISTCONTROL=ignoredups

Per fare ciò, puoi usare questo comando:

nano ~/.bashrc
    
risposta data jrg 02.12.2010 - 21:11
0

Per registrare in modo univoco ogni nuovo comando è difficile. Per prima cosa devi aggiungere ~/.profile o simile:

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Quindi devi aggiungere a ~/.bash_logout :

history -a
history -w
    
risposta data Steven Penny 04.02.2018 - 19:42

Leggi altre domande sui tag