Wie schließe ich ein Terminal, ohne den Verlauf zu speichern?

33

Mehr als einmal habe ich versehentlich eine Reihe von Befehlen ausgeführt und meine Bash-Historie verschmutzt. Wie schließe ich mein Terminal, ohne meinen Bash-Verlauf zu speichern? Ich benutze Fedora.

Michael Mrozek
quelle

Antworten:

25

Der Verlauf Ihrer Shell wird in der durch die HISTFILEVariable angegebenen Datei gespeichert . So:

unset HISTFILE

Dies gilt auch für zsh, jedoch nicht für ksh, das weiterhin in der Datei gespeichert wird, die beim $HISTFILEStarten der Shell angegeben wird (und Sie entscheiden sich umgekehrt, den Verlauf in ksh zu speichern, sobald Sie die Shell gestartet haben).

Gilles 'SO - hör auf böse zu sein'
quelle
Kann ich das benutzen, bevor ich mich auslogge, nachdem ich den Verlauf verschmutzt habe? und es ist nur für diese Sitzung? Ich brauche nicht das set HISTFILEnächste Mal, wenn ich mich anmelde? (Sagen Sie einfach, ob dies richtig oder falsch ist)
@ acidzombie24 Richtig, Änderungen an Umgebungsvariablen werden nicht zwischen Sitzungen gespeichert, es sei denn, Sie speichern die Änderungen explizit, z. B. in RC-Dateien.
jw013
31

Kurze Antwort:

Geben Sie dies an der Eingabeaufforderung ein:

$ kill -9 $$

Dies wird Ihre Shell sofort , ohne die Schale der Lage zu töten ist zu tun etwas wie Falle das Signal, speichern Geschichte, führen ~/.bash_logout, warnen gestoppt Arbeitsplätze oder jede dieser guten Sachen.

Lange Antwort:

Hinweis: Diese Optionen schließen sich nicht gegenseitig aus. Sie können alle gleichzeitig verwendet werden.

Option 1:

Wenn Sie ein Perfektionist sind, wenn es darum geht, Ihre Verlaufsdatei HISTIGNOREzu überfrachten, können Sie die Variable so ändern , dass sie eine Reihe von Befehlen enthält, die nicht aufgezeichnet werden sollen. Zum Beispiel, wenn Sie hinzufügen , HISTIGNORE='ls*:cd*'um Ihre ~/.bashrcdann jeder Instanz lsund cdnicht eingefügt in der History - Datei.

Option 2:

Wenn Sie befehlsbezogen steuern möchten, welche Befehle in Ihrem Verlauf nicht berücksichtigt werden, können Sie festlegen HISTCONTROL='ignorespace', dass keine Befehlszeilen mit einem Leerzeichen beginnen. Bei Verwendung von ignorebothwerden auch wiederholte Zeilen weggelassen. Wenn Sie dann die Leertaste drücken, bevor Sie einen Befehl eingeben, wird dieser nicht in Ihrer Verlaufsdatei angezeigt.

Option 3:

Wenn Sie nur möchten, dass die Shell beim Schließen des Terminals sofort beendet wird, können Sie trapdas Signal, das das Terminalprogramm an die Shell sendet ( xtermz. B. sendet SIGHUPund wartet, bis die Shell beendet wird), und den Vorgang beenden, ohne den Verlauf zu speichern empfängt dieses Signal. Fügen Sie dies zu Ihrem hinzu ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
Amphetamachine
quelle
2
+1 für die Methode 'kill -9 $$'. Dies ist sicherlich eine Möglichkeit, Situationen zu umgehen, in denen HISTIGNORE usw. schreibgeschützt sind.
Corey Henderson
7
Ich halte es nicht für eine gute Idee, kill -9für irgendetwas zu werben, außer in schlimmen Situationen, in denen alles andere fehlgeschlagen ist.
Christoffer Hammarström
1
Das Senden von SIGKILL ist als Standardverfahren nie eine gute Idee. Verwenden Sie die richtigen Verfahren, z. B. das Deaktivieren von HISTFILE.
Arcege
@Arcege TMTOWTDI.
Amphetamachine
Ich wollte das Gegenteil wissen - leider, wie man Bash tötet, um sicherzustellen, dass es seine Geschichte rettet - und dies beantwortete meine Frage, danke.
Mveroone
3

Ich bin überrascht zu sehen, dass niemand history -cunmittelbar zuvor einen Vorschlag gemacht hat exit. IINM (ich bin kein Experte), das wird gut tun.

msh210
quelle
2
Sie sind auf dem richtigen Weg: history -rDie Verlaufsdatei wird erneut gelesen, sodass das Speichern zu einem No-Op wird.
Simon Richter
Das Löschen der Geschichte ist eine schlechte Angewohnheit ... Die Shell-Geschichte enthält viele nützliche Informationen darüber, wer was getan hat. Es ist sehr nützlich für Leute, die neu auf Ihren Plattformen sind (es sei denn, Sie sind zu 100% sicher über Ihre Dokumentation, Änderungsmanagement)
Franklin Piat
2

Es gibt zwei Umgebungsvariablen, die bash verwendet, um die Verlaufsdatei und die Anzahl der Zeilen zu bestimmen, in die beim Beenden der Shell geschrieben werden soll.

Sie können den Verlauf Ihrer Sitzung mit einem der folgenden Elemente verwerfen (festgelegt während der Sitzung, die Sie aus Ihrer Verlaufsdatei ausschließen möchten):

HISTFILE=/dev/null

oder

HISTSIZE=0

Beides funktioniert in Bash on Fedora einwandfrei

Eli Heady
quelle
1

Ich bin mir nicht sicher, warum dir deine Befehlsgeschichte so wichtig ist. Wenn Sie bestimmte Befehle häufig benötigen, macht es möglicherweise mehr Spaß, wenn Sie Aliase für sie definieren, damit Sie sie mit zwei Tastenanschlägen zurückholen können, anstatt im Verlauf nach ihnen suchen zu müssen.

Simon Richter
quelle
0
  1. Eli hat dir schon die richtige Antwort für Bash gegeben, die gesetzt werden soll HISTSIZE=0.

  2. Ich würde nur die Methode hinzufügen, um es für GNU-Bildschirm zu tun . Drücken Sie Ctrl+A(Bildschirm-Escape-Sequenz) gefolgt von :scrollback 0. Dadurch wird der Scroll-Back-Verlauf gelöscht. Jetzt können Sie sofort die :scrollback 15000Größe des Scrollback-Puffers zurücksetzen.

gsbabil
quelle
Wann gab das OP an, dass es verwendet wurde screen(1)?
Amphetamachine
Er hat es nicht getan. Sie könnten jedoch Bash in einer Bildschirmsitzung ausführen und HISTSIZE = 0 belässt Ihre Aktivitätsdetails weiterhin im Bildlauf-Zurück-Puffer des Bildschirms. Also, wenn du es wirklich sauber haben willst, musst du es auch tun scrollback=0.
gsbabil
Der Scrollback-Puffer wird gelöscht, wenn das Fenster geschlossen wird (dh wenn die Shell beendet wird). Was ist, wenn Sie Strg + H eingeben? Wird es die Logdatei töten?
Amphetamachine
@amphetamachine: Nein, es wird nur die Protokollierung des aktuellen Fensters beginnen / beenden. Neighther Ctrl+a Hnoch Ctrl+a :clearwird die Geschichte entfernen. Du brauchst Ctrl+a :scrollback 0. Sie können es selbst testen. Starten Sie eine neue Bildschirmsitzung. Jetzt mache a cat /etc/passwd. Führen Sie nun einen der oben genannten Schritte aus - Ctrl+a Hoder Ctrl+a :clear. Versuchen Sie nun, aus dem Bildschirmpuffer zu kopieren, indem Sie einen Ctrl+a [Pfeil nach oben und anschließend einen Pfeil nach oben drücken , um zu sehen, wie weit Sie zum Kopieren gehen können. Wenn Sie ein Ctrl+a :scrollbackgefolgt von einem getan haben clear, würden Sie nur so weit gehen, wie Sie im aktuellen Fenster sehen können, da es keinen Scrollback-Puffer gibt.
Gsbabil