Domanda

Sto scrivendo il mio PROMPT_COMMAND="history -a;$PROMPT_COMMAND" Ma ricevo ancora alcuni duplicati da diverse sessioni terminali. Sembra che otterrò ancora dei duplicati ma ottengo di meno usando il comando PROMPT_COMMAND="history -w;$PROMPT_COMMAND".

So di poter fare il history -a;history -c; history -r Ma non li voglio tutti sincronizzati. Voglio che ciò accada solo quando chiamo storia -n. Fondamentalmente sto usando la storia -a o la storia -w ma non riesco a trovare la differenza tra i due. Quale sarebbe meglio dover evitare il maggior numero possibile di duplicati.

È stato utile?

Soluzione

Hai dichiarato due domande:

Qual è la differenza tra history -a e history -w?

history -a volere aggiungere La cronologia della sessione corrente al contenuto del file di cronologia.

history -w volere sostituire Il contenuto del file di cronologia con la cronologia della sessione corrente.

Quale evita più duplicati?

Teoricamente nessuno dei due. Né -a-w Controlla i duplicati. In pratica -w Evita più duplicati perché sostituisce il contenuto del file di cronologia. Eventuali potenziali voci duplicate nel file vengono eliminate, insieme a qualsiasi altra cosa nel file.

Leggi di più su history comando Nel manuale Bash.


Alcune ulteriori informazioni su altre possibilità di uccidere i duplicati:

La speciale variabile Bash HISTCONTROL=ignoredups Non aiuta molto qui perché elimina solo i duplicati mentre vengono inseriti nella shell in esecuzione. Non fa nulla per impedire i duplicati esistenti nella storia corrente o nel file di cronologia. Inoltre ignoredups Ignora solo comandi che è un duplicato del comando precedente, non se è un duplicato di qualsiasi comando precedentemente nella cronologia.

Purtroppo nemmeno il tanto promettente HISTCONTROL=erasedups Aiuta molto qui. erasedups Cancella qualsiasi voce di cronologia corrispondente al comando attualmente immesso. Purtroppo, lo fa solo nella storia della sessione attuale. Non cerca duplicati nel file di cronologia. Inoltre non impedirà ai duplicati di inserire la cronologia della sessione quando si utilizzano history -n.

Leggi di più su variabile speciale HISTCONTROL Nel manuale Bash.

Altri suggerimenti

Puoi evitare i duplicati usando questo

export HISTCONTROL=ignoredups

Puoi guardare questo per ulteriori informazioni:

http://stefaanlippens.net/bashduplicates

Usa la variabile bash PROMPT_COMMAND insieme a history e usando sort e uniq Comandi:

$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"

Con questo non è necessario impostare shopt -s histappend e fai export HISTCONTROL=erasedups.

Ciò manterrà il tuo file di cronologia e cronologia senza duplicati al volo. È possibile giocare con la cronologia dei comandi dell'ordine (Suggerimento: utilizzare i numeri di linea nella cronologia, ordinare dalla posizione di inizio della riga specifica e dopo aver rimosso i duplicati, ordinare di nuovo con i numeri di riga).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top