Der gleiche Befehl wird immer wieder in meiner Historie aufgeführt. Wie kann ich das vermeiden? Ich weiß, dass es über möglich ist, HISTCONTROLaber ich habe nicht den richtigen Weg gefunden.
Der gleiche Befehl wird immer wieder in meiner Historie aufgeführt. Wie kann ich das vermeiden? Ich weiß, dass es über möglich ist, HISTCONTROLaber ich habe nicht den richtigen Weg gefunden.
Antworten:
Von der bashManpage:
HISTCONTROL
Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden. Wenn die Liste der Werte enthält
ignorespace, werden Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert. Ein Wert vonignoredupsbewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Ein Wert vonignorebothist eine Abkürzung fürignorespaceundignoredups. Ein Wert vonerasedupsbewirkt, 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 ein ~/.bashrc:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_loginmeisten der Zeit es funktionieren würde , wenn Bashrc geändert wird , aber das ist nicht der Fall all die Zeit.
source ~/.bashrc && source ~/.bash_profile
Stecke dies in dein ~/.bashrc:
export HISTCONTROL=ignoredups
Sie könnten stattdessen verwenden ignoreboth. Dies ist eine Abkürzung für ignorespaces(Befehle, die mit Leerzeichen beginnen) und ignoredups(Duplikate).
Ich bevorzuge es ignoredupsalleine, da ich das Standardverhalten, Befehle mit Leerzeichen an der Vorderseite zu ignorieren, ziemlich ärgerlich finde, wenn ich einen Befehl von einer Website kopiere und er nicht gespeichert wird, weil ich ihn versehentlich auch in ein Leerzeichen kopiert habe jeder seine eigenen.
ignoredupsbewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden . Es werden nur aufeinanderfolgende identische Zeilen entfernt.
Wenn Sie dies ~/.bashrceingeben, wird die @ alvin-Lösung in verschiedenen Sitzungen als wlell angewendet
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROLund deiner nicht? Was ist der Unterschied? Es funktioniert für mich ohne Export, ich bin nur neugierig
exportStellt die Variable im Allgemeinen Teilprozessen zur Verfügung. stackoverflow.com/q/1158091/552621 Im Falle HISTCONTROL, PROMPT_COMMANDusw., werden diese Variablen durch die Shell verwendet selbst so vielleicht sie exportieren (für Kinder verarbeitet) ist nicht erforderlich.
export HISTCONTROL=erasedups
Es ist schwierig, jeden neuen Befehl eindeutig aufzuzeichnen. Zuerst müssen Sie hinzufügen
~/.profileoder ähnlich:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Dann müssen Sie hinzufügen ~/.bash_logout:
history -a
history -w