Storia -a vs storia -w in bash
-
27-10-2019 - |
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.
Soluzione
Hai dichiarato due domande:
Qual è la differenza tra
history -a
ehistory -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
né -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:
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).