Wie funktioniert der Befehl history?

8

Wenn ich einen Befehl in das Terminal eingebe, wird er erst in meiner ~/.bash_historyDatei angezeigt, wenn ich meine Sitzung beende.

Wenn ich meine ~/.bash_historyDatei manuell bearbeite (zum Beispiel entferne ich die letzten drei Befehle), werden beim Eingeben historyweiterhin die Befehle angezeigt, die ich aus der ~/.bash_historyDatei entfernt habe. Erst wenn ich meine Sitzung beende und mich erneut anmelde, verschwinden sie.

Wie werden meine ~/.bash_historyDatei und der historyBefehl synchronisiert?

sys0dm1n
quelle
2
es ist im RAM ... Wo ist die Bash-Geschichte gespeichert?
Zanna
"Wenn ich einen Befehl in das Terminal eingebe" Nicht wirklich wahr. Wenn Sie standardmäßig ein Leerzeichen vor den Befehl setzen, wird dieser Befehl nicht gespeichert.
Rinzwind
@Rinzwind Das Verhalten beim Speichern des Befehls, auch wenn vor ihm ein Leerzeichen steht, kann durch Bearbeiten des Werts Ihrer Umgebungsvariablen HISTCONTROL geändert werden.
sys0dm1n
@ sys0dm1n "standardmäßig"
Rinzwind

Antworten:

10

Wenn Sie ein Bash-Terminal öffnen, wird der Inhalt ~/.bash_historyder aktiven Shell geladen und der Verlauf der aktiven Shell (im RAM) erstellt. Dabei wird jeder in dieser Shell ausgeführte Befehl hinzugefügt - und nur dazu, nicht zur Datei.

Nur wenn Sie ein Bash-Terminal schließen, wird sein Verlauf an Ihre ~/.bash_historyDatei angehängt .


Optionen von history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Optionen für die ~/.bashrcDatei

Wenn Sie dieses Verhalten so ändern möchten, dass der temporäre Verlauf ~/.bash_historydirekt nach der Ausführung eines Befehls gespeichert wird , fügen Sie die folgende Zeile hinzu:

PROMPT_COMMAND="history -a"

Wenn Sie außerdem möchten, dass jedes Terminal die ~/.bash_historyDatei nach jeder Befehlsausführung automatisch lädt , fügen Sie stattdessen diese Zeile hinzu:

PROMPT_COMMAND="history -a; history -c; history -r"

Wenn Sie bestimmte Befehle (z. B. alles, was mit sudound beginnt cat) vom Speichern ausschließen möchten , fügen Sie diese Zeile hinzu:

HISTIGNORE="sudo*:cat*"
Dessert
quelle