Der gleiche Befehl wird immer wieder in meiner Historie aufgeführt. Wie kann ich das vermeiden? Ich weiß, dass es über möglich ist, HISTCONTROL
aber 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, HISTCONTROL
aber ich habe nicht den richtigen Weg gefunden.
Antworten:
Von der bash
Manpage:
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 vonignoredups
bewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden. Ein Wert vonignoreboth
ist eine Abkürzung fürignorespace
undignoredups
. Ein Wert vonerasedups
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 ein ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
meisten 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 ignoredups
alleine, 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.
ignoredups
bewirkt, dass Zeilen, die mit dem vorherigen Verlaufseintrag übereinstimmen, nicht gespeichert werden . Es werden nur aufeinanderfolgende identische Zeilen entfernt.
Wenn Sie dies ~/.bashrc
eingeben, 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 HISTCONTROL
und deiner nicht? Was ist der Unterschied? Es funktioniert für mich ohne Export, ich bin nur neugierig
export
Stellt die Variable im Allgemeinen Teilprozessen zur Verfügung. stackoverflow.com/q/1158091/552621 Im Falle HISTCONTROL
, PROMPT_COMMAND
usw., 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
~/.profile
oder ähnlich:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Dann müssen Sie hinzufügen ~/.bash_logout
:
history -a
history -w