Geschichte -a gegen Geschichte -W in Bash
-
27-10-2019 - |
Frage
Ich schreibe meine PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Aber ich bekomme immer noch einige Duplikate aus verschiedenen Terminalsitzungen. Es scheint, dass ich immer noch einige Duplikate bekommen werde, aber ich bekomme weniger mit dem Befehl PROMPT_COMMAND="history -w;$PROMPT_COMMAND"
.
Ich weiß, ich kann das machen history -a;history -c; history -r
Aber ich möchte nicht, dass sie alle synchronisieren. Ich möchte nur, dass das auftritt, wenn ich die Geschichte -n nenne. Ich bin im Grunde genommen darauf zurückzuführen, dass ich entweder die Geschichte -A oder die Geschichte -W verwende, aber ich kann den Unterschied zwischen beiden nicht finden. Welches wäre besser, um so viele Duplikate wie möglich zu vermeiden.
Lösung
Sie haben zwei Fragen angegeben:
Was ist der Unterschied zwischen
history -a
undhistory -w
?
history -a
Wille anhängen Ihr aktueller Sitzungsverlauf zum Inhalt der Verlaufsdatei.
history -w
Wille ersetzen Der Inhalt der Verlaufsdatei mit Ihrem aktuellen Sitzungsverlauf.
Welches vermeidet mehr Duplikate?
Theoretisch auch nicht. Weder -a
Noch -w
Überprüfungen auf Duplikate. Praktisch -w
Vermeidet mehr Duplikate, da es den Inhalt der Verlaufsdatei ersetzt. Alle potenziellen doppelten Einträge in der Datei werden zusammen mit allem anderen in der Datei beseitigt.
Lesen Sie mehr über die history
Befehl im Bash -Handbuch.
Einige weitere Informationen über andere Möglichkeiten zum Töten von Duplikaten:
Die spezielle Bash -Variable HISTCONTROL=ignoredups
Hilft hier nicht viel, da dies nur Duplikate beseitigt, wenn sie in die laufende Hülle eingegeben werden. Es ist nichts, um vorhandene Duplikate im aktuellen Verlauf oder in der Verlaufsdatei zu verhindern. Außerdem ignoredups
Ignoriert nur Befehle, die ein Duplikat des vorherigen Befehls sind, nicht wenn es sich um ein Duplikat eines zuvor in der Geschichte befindlichen Befehls handelt.
Leider nicht einmal vielversprechend HISTCONTROL=erasedups
hilft hier viel. erasedups
Löscht alle Verlaufseintrag, die dem derzeit eingegebenen Befehl entspricht. Leider tut es dies nur in der aktuellen Sitzungsgeschichte. Es wird in der Verlaufsdatei nicht nach Duplikaten gesucht. Es wird auch nicht verhindern, dass Duplikate bei der Verwendung in Ihren Sitzungsverlauf eintreten history -n
.
Lesen Sie mehr über die besondere Variable HISTCONTROL
im Bash -Handbuch.
Andere Tipps
Sie können Duplikate vermeiden, indem Sie dies verwenden
export HISTCONTROL=ignoredups
Weitere Informationen finden Sie unter:
Verwenden Sie die Bash -Variable PROMPT_COMMAND
mit history
und verwenden sort
und uniq
Befehle:
$> 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"
Damit müssen Sie nicht einstellen shopt -s histappend
und TU export HISTCONTROL=erasedups
.
Dadurch bleibt Ihre Geschichte und Verlaufsdatei ohne Duplikate im Fliege. Sie können mit der Eingabe der Befehle der Historie in der Reihenfolge spielen (Hinweis: Verwenden Sie die Zeilennummern in der Geschichte, sortieren Sie von bestimmten Zeilenstartpositionen und nach dem Entfernen von Duplikaten, die erneut mit Zeilennummern sortieren).