Frage Vermeiden Sie, das Kommando in der Geschichte zu behalten


Ich benutze bash und ich möchte vermeiden, dass einige Befehle in der Geschichte gehalten werden.

  • Ist das nur für den nächsten Befehl möglich?
  • Ist es möglich, dies für die gesamte Sitzung zu tun?

33
2017-08-01 04:53


Ursprung




Antworten:


und ich erinnerte mich gerade an eine andere Antwort, diese ist die tatsächliche Antwort auf Ihre Frage.

Wenn Sie in HISTCONTROL "ignorespace" haben, erinnert sich bash nicht an eine Zeile, die mit einem Leerzeichen beginnt. Es wird nicht einmal in der aktuellen Shell-Geschichte angezeigt, geschweige denn in $ HISTFILE gespeichert werden.

z.B. ich habe export HISTCONTROL = 'ignorierboth: löschtauch' in meinem ~ / .bashrc

Hier sind die Details von der Bash Man Seite:

HISCONTROL
  Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle ausgeführt werden
  in der Verlaufsliste gespeichert. Wenn die Liste der Werte enthält
  ignorespace, Zeilen, die mit einem Leerzeichen beginnen, nicht
  in der Verlaufsliste gespeichert. Ein Wert von ignoredups verursacht Linien
  Übereinstimmung mit dem vorherigen Verlaufseintrag, um nicht gespeichert zu werden. Ein Wert von
  ignoreboth ist eine Abkürzung für ignorespace und ignoredups. Ein Wert
  von löschtauch bewirkt, dass alle vorherigen Zeilen der aktuellen Zeile entsprechen
  vor dem Speichern dieser Zeile aus der Verlaufsliste entfernt werden.
  Jeder Wert, der nicht in der obigen Liste enthalten ist, wird ignoriert. Wenn HISTECONTROL ist
  nicht gesetzt oder enthält keinen gültigen Wert, alle von der
  Shell-Parser werden in der Verlaufsliste gespeichert, abhängig vom Wert
  von HISTIGNORE. Die zweite und die folgenden Zeilen einer Mehrfachzeile
  Verbundbefehl werden nicht getestet und dem Verlauf hinzugefügt
  unabhängig vom Wert von HISTCONTROL.

36
2017-08-01 06:00



+1 für den Weltraumtrick: D - petrus


Hier ein paar Geschichtslektionen, die ich beim Googlen gelernt habe:

Sie können festlegen, dass der Verlauf bestimmte Zeichenfolgen ignoriert. In diesem Beispiel habe ich die Befehle ls, passwd und alle Befehle ignoriert, denen der Zeichenraum vorangestellt ist.

export HISTIGNORE = "ls: passwd:"

Um den Verlauf für Ihre Sitzung zu deaktivieren, können Sie Folgendes ausführen:

Export HISTSIZE = 0

Referenz


19
2017-08-01 05:22





Wenn Sie nur den letzten Befehl aus dem Verlauf entfernen möchten, können Sie drücken Aufwärtspfeil, gefolgt von Strg - U (zum Anfang der Zeile löschen), dann Aufwärtspfeil nochmal.

Sie können jede einzelne Zeile aus dem Verlauf löschen. Verwenden Sie einfach den Pfeil nach oben oder suchen Sie oder was auch immer, um die aktuelle Befehlszeile zu bearbeiten, und drücken Sie dann Strg - U, und dann Aufwärtspfeil oder Abwärtspfeil in eine andere Verlaufszeile wechseln.

Das habe ich vor ein paar Jahren zufällig entdeckt. Ich habe keine Ahnung, ob es dokumentiert ist oder nicht.

Im Allgemeinen ist es jedoch einfacher, den aktuellen Shell-Verlauf nicht zu speichern:

HISTFILE=/dev/null

7
2017-08-01 05:50





Du könntest das deaktivieren HISTFILE Variable. Von man bash:

  HISTFIL
         Der Name der Datei, in der die Befehlsgeschichte gespeichert ist (siehe HIS-
         TORY unten). Der Standardwert ist ~ / .bash_history. Wenn nicht gesetzt,
         Der Befehlsverlauf wird bei einer interaktiven Shell nicht gespeichert
         beendet.

Ich glaube nicht, dass dies verhindert, dass der Befehl in der lokalen Shell-Historie erscheint, bevor die Shell beendet wird.


3
2017-08-01 05:00





Das tue ich manchmal

export HISTFILE=/dev/null

2
2017-08-06 10:55





Ich sehe, dass niemand diese Methode geschrieben hat, also werde ich es tun.

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d Löscht den erwähnten Eintrag aus der Historie.

HISTCMD speichert die Befehlsnummer des Befehls, der als nächstes ausgeführt werden soll. Also, (HISTCMD-1) bezieht sich auf den zuletzt ausgeführten Befehl.

Ich habe einen kurzen Bashfilm gemacht, der zeigt, wie es funktioniert: https://asciina.org/a/dtxpuovhty0obhln50soqypt2

Nach dem Ausführen des Befehls und weil es auch den Befehl selbst löscht, wird der Befehl nicht angezeigt, wenn Sie mit dem Pfeil fortfahren. Wenn Sie also häufig damit arbeiten möchten, ist es am besten, einen Alias ​​zu erstellen:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

Dann können Sie tun:

$ hc command

1
2017-11-20 16:48