Antworten:
und ich habe mich gerade an eine andere antwort erinnert, diese ist die eigentliche antwort auf deine frage.
Wenn Sie in HISTCONTROL "Ignoranz" haben, merkt sich Bash keine Zeile, die mit einem Leerzeichen beginnt. Es wird nicht einmal im Verlauf der aktuellen Shell angezeigt, geschweige denn in $ HISTFILE gespeichert.
Ich habe zB export HISTCONTROL = 'ignoreboth: erasedups' in meinem ~ / .bashrc
Hier sind die Details aus der Bash-Manpage:
HISTCONTROL Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle sind in der Verlaufsliste gespeichert. Wenn die Liste der Werte enthält Unwissenheit, Zeilen, die mit einem Leerzeichen beginnen, nicht in der Verlaufsliste gespeichert. Ein Wert von ignoredups verursacht Zeilen Übereinstimmungen mit dem vorherigen Verlaufseintrag werden nicht gespeichert. Ein Wert von ignoreboth steht für ignorespace und ignoredups. Ein Wert Eine Anzahl gelöschter Zeilen bewirkt, dass alle vorherigen Zeilen 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 ist nicht gesetzt oder enthält keinen gültigen Wert, alle von der gelesenen Zeilen Shell-Parser werden abhängig vom Wert in der Verlaufsliste gespeichert von HISTIGNORE. Die zweite und nachfolgende Zeile einer Mehrfachzeile zusammengesetzte Befehle werden nicht getestet und dem Verlauf hinzugefügt unabhängig vom Wert von HISTCONTROL.
Hier sind ein paar Lektionen aus der Geschichte, die ich durch Googeln gelernt habe:
Sie können den Verlauf so einstellen, dass bestimmte Zeichenfolgen ignoriert werden. In diesem Beispiel habe ich die Befehle ls, passwd und alle Befehle mit dem Präfix "Leerzeichen" ignoriert.
export HISTIGNORE = "ls: passwd:"
Um den Verlauf für Ihre Sitzung zu deaktivieren, können Sie Folgendes ausführen:
export HISTSIZE = 0
Wenn Sie nur den letzten Befehl aus dem Verlauf entfernen möchten, können Sie drücken Up-arrow, gefolgt von Ctrl - U(Löschen zum Zeilenanfang) und dann Up-arrowerneut.
Sie können auf diese Weise jede einzelne Zeile aus dem Verlauf löschen. Verwenden Sie einfach den Aufwärtspfeil oder die Suche oder etwas anderes, um es zur aktuellen Befehlszeile zu machen, die gerade bearbeitet wird, und drücken Sie Ctrl - Udann und dann Up-arrowoder Down-arrow, um zu einer anderen Verlaufszeile zu wechseln.
Ich habe das vor einem Tag zufällig entdeckt. Ich habe keine Ahnung, ob es dokumentiert ist oder nicht.
Im Allgemeinen ist es jedoch weniger mühsam, den Verlauf der aktuellen Shell überhaupt nicht zu speichern:
HISTFILE=/dev/null
Sie können die HISTFILE
Variable deaktivieren . Von man bash
:
HISTFILE Der Name der Datei, in der der Befehlsverlauf gespeichert ist (siehe HIS- TORY unten). Der Standardwert ist ~ / .bash_history. Wenn nicht gesetzt, Der Befehlsverlauf wird bei einer interaktiven Shell nicht gespeichert Ausgänge.
Ich glaube nicht, dass dies verhindert, dass der Befehl in der lokalen Shell-Historie erscheint, bevor die Shell beendet wird.
Ich sehe, dass niemand diese Methode geschrieben hat, also werde ich.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
löscht den genannten Eintrag aus dem Verlauf.
HISTCMD
speichert die befehlsnummer des befehls, der als nächstes ausgeführt werden soll. (HISTCMD-1) bezieht sich also auf den zuletzt ausgeführten Befehl.
Ich habe einen kurzen Bash-Film gemacht, der zeigt, wie es funktioniert: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Nachdem Sie den Befehl ausgeführt und auch den Befehl selbst gelöscht haben, wird der Befehl nicht angezeigt, wenn Sie ihn mit dem Pfeil nach oben bewegen. Wenn Sie ihn also öfter verwenden möchten, sollten Sie einen Alias erstellen:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Dann können Sie tun:
$ hc command