Wie synchronisiere ich den Befehlsverlauf der Terminalsitzung in Bash?

13

Ich habe versucht, ~/.bash_historyin einer Terminalsitzung nach meinen letzten Befehlen zu suchen, aber sie waren einfach nicht da. Ich denke, das liegt daran, dass ich mehrere Terminalsitzungen geöffnet habe.

Gibt es eine Möglichkeit, den Befehlsverlauf der aktuellen Terminalsitzung in die Datei bash_history zu synchronisieren (dh zu synchronisieren, zu pushen oder zu synchronisieren, zu schreiben) (ohne die Sitzung zu schließen und diese Umgebung zu verlieren)?

(In der Idee wäre es in etwa ähnlich, wie der syncBefehl die Dateisystemänderungen auf einigen Systemen speichert.)

Ich stelle mir vor, ich könnte Bash einrichten, um den Verlauf mehrerer Sitzungen beizubehalten, aber die Möglichkeit, den aktuellen Verlaufspuffer zu pushen, wäre in Szenarien nützlich, in denen Sie an einem neuen Computer arbeiten und versehentlich vergessen haben, Bash so einzurichten, wie Sie es sich gewünscht hätten .

n611x007
quelle
Ich habe versucht, ein history -a Shell-eingebautes Kommando zu verwenden, aber irgendwie bekomme ich danach 'Erlaubnis verweigert' für die .bash_historyDatei.
n611x007
Doppelte Frage. Siehe: unix.stackexchange.com/questions/1288/…
Eduardo Leggiero

Antworten:

19

Diese Zeile hinzufügen zu .bashrc:

export PROMPT_COMMAND="history -a; history -n"

Neues Terminal öffnen und prüfen.

Erläuterung

  • history -a Hängt neue Verlaufslinien an die Verlaufsdatei an.
  • history -nWeist bashan, Zeilen zu lesen, die nicht aus der Verlaufsdatei in die aktuelle Verlaufsliste der Sitzung gelesen wurden.
  • PROMPT_COMMAND: Der Inhalt dieser Variablen wird als regulärer Befehl vor der bashEingabeaufforderung show ausgeführt. Jedes Mal, wenn Sie einen Befehl ausführen, history -a; history -nwird dieser ausgeführt und Ihr bashVerlauf wird synchronisiert.
cuonglm
quelle
Vielen Dank! Ich weiß nicht, warum mir die Erlaubnis verweigert wurde, aber bei neuen Terminals scheint dies nun wie erwartet zu funktionieren! Ich denke, ich sollte normalerweise auch history -ain einem Terminal mit unverändertem bashrc arbeiten können.
n611x007
Wann muss man sich über die Auswirkungen auf die Leistung Gedanken machen? (Ich denke über Low-End-Geräte nach und bin mir nicht sicher, wie
hoch der
1
Auch könnten Sie bereits eine Eingabeaufforderung haben, in diesem Fall ist es besser zu Einsatzexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian
Wenn ${PROMPT_COMMAND}leer ist, gibt dies einen Fehler wegen der Führung;
Boris Däppen
@ BorisDäppen ist richtig, aber das ist leicht zu behebenexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML