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.

War es hilfreich?

Lösung

Sie haben zwei Fragen angegeben:

Was ist der Unterschied zwischen history -a und history -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:

http://stefaanlippens.net/bashduplicates

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top