it-swarm.com.de

Wie kann man vermeiden doppelte Einträge in .bash_history

Der gleiche Befehl wird immer wieder in meiner Historie aufgeführt. Wie kann ich das vermeiden? Ich weiß, dass es über HISTCONTROL möglich ist, aber ich habe nicht den richtigen Weg gefunden.

107
karthick87

Aus der Manpage bash:

HISTCONTROL

Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden. Wenn die Werteliste ignorespace enthält, werden Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert. Ein Wert von ignoredups bewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Ein Wert von ignoreboth ist eine Abkürzung für ignorespace und ignoredups. Der Wert erasedups bewirkt, dass alle vorherigen Zeilen, die mit der aktuellen Zeile übereinstimmen, aus der Verlaufsliste entfernt werden, bevor diese Zeile gespeichert wird. Jeder Wert, der nicht in der obigen Liste enthalten ist, wird ignoriert. Wenn HISTCONTROL nicht gesetzt ist oder keinen gültigen Wert enthält, werden alle vom Shell-Parser gelesenen Zeilen in der Verlaufsliste gespeichert, vorbehaltlich des Werts von HISTIGNORE. Die zweite und die folgenden Zeilen eines mehrzeiligen zusammengesetzten Befehls werden nicht getestet und unabhängig vom Wert von HISTCONTROL zum Verlauf hinzugefügt.

Fügen Sie also die folgende Zeile in Ihr ~/.bashrc ein:

export HISTCONTROL=ignoreboth:erasedups

122
Isaiah

Stecke dies in deinen ~/.bashrc:

export HISTCONTROL=ignoredups

Sie könnten stattdessen ignoreboth verwenden. Dies ist eine Abkürzung für ignorespaces (Befehle, die mit Leerzeichen beginnen) und ignoredups (Duplikate).

Ich bevorzuge ignoredups für sich allein, da ich das standardmäßige Ignorieren von Befehlen mit Leerzeichen an der Vorderseite als ziemlich ärgerlich empfinde, wenn ich einen Befehl von einer Website kopiere und er nicht gespeichert wird, weil ich ihn versehentlich auch in ein Leerzeichen kopiert habe. ... aber für jeden etwas.

23
Oli

Wenn Sie dies in ~/.bashrc setzen, wird @ alvins Lösung über verschiedene Sitzungen hinweg als wlell angewendet

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

Quelle: Linux: Bash-Verlauf: Einstellung "Ignoriert" und "Gelöscht" widerspricht dem gemeinsamen Verlauf über mehrere Sitzungen hinweg

10
Nour Wolf
export HISTCONTROL=erasedups
4
withoutasound

Fügen Sie Ihrem ~/.bashrc Folgendes hinzu:

export HISTCONTROL=ignoredups

Dazu können Sie diesen Befehl verwenden:

nano ~/.bashrc
3
jrg

Es ist schwierig, jeden neuen Befehl eindeutig aufzuzeichnen. Zuerst müssen Sie ~/.profile oder ähnliches hinzufügen:

HISTCONTROL=erasedups
Prompt_COMMAND='history -w'

Dann müssen Sie zu ~/.bash_logout hinzufügen:

history -a
history -w
0
Steven Penny