Ist es möglich, das Schreiben in .bash_history sofort durchzuführen?

Ist es möglich, das Schreiben in .bash_history sofort durchzuführen?

Ich öffne oft sehr viele Terminals (im Moment habe ich in diesem Arbeitsbereich sieben geöffnet) und suche oft historynach grepeinem Befehl, den ich erst kürzlich geschrieben habe, aber ich möchte nicht erst nach dem Terminal suchen und dann nach oben scrollen und danach suchen.

Manchmal schließen sich meine Terminals ohne exitund alles, was ich darin geschrieben habe, geht verloren. Manchmal brauchte ich etwas, das ich in einem Terminal geschrieben hatte, das beendet wurde.

Gibt es eine Möglichkeit, es so einzurichten, dass jedes Terminal .bash_historysofort schreibt? Oder zumindest einmal pro Minute oder so ähnlich?

Antwort1

Eine einfache Lösung finden Sie inBash-Verlauf in Echtzeit aktualisieren.

Dort steht, dass diese Befehle in die .bashrc-Konfiguration eingefügt werden sollen:

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

Der erste Befehl ändert den Modus der Verlaufsdatei auf Anhängen und der zweite konfiguriert den history -aBefehl so, dass er bei jeder Shell-Eingabeaufforderung ausgeführt wird. Die -aOption bewirkt, dass historydie aktuellen/neuen Zeilen sofort in die Verlaufsdatei geschrieben werden.

Ausman bash:

Wenn die Shell-Option „histappend“ aktiviert ist (siehe die Beschreibung von „shopt“ unter „SHELL BUILTIN COMMANDS“ weiter unten), werden die Zeilen an die Verlaufsdatei angehängt, andernfalls wird die Verlaufsdatei überschrieben.

Verwandte Themen für Zsh:

Antwort2

Versuchen Sie, dies in Ihr Einfügen einzufügen .bashrc:

shopt -s histappend                      # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Kredit hier:https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135

history -clöscht den Verlauf der laufenden Sitzung. Dadurch wird der Verlaufszähler um die Anzahl von reduziert $HISTSIZE. history -rliest den Inhalt von $HISTFILEund fügt ihn in den Verlauf der aktuell laufenden Sitzung ein. Dadurch wird der Verlaufszähler um die Anzahl der Zeilen in erhöht $HISTFILE.

Ich glaube, es bedeutet, dass die Befehle fast sofort verfügbar sind (Sie haben ein Terminal, „schreiben“ echo 1, ein zweites Terminal echo 2, das erste echo 3und wenn Sie die Pfeiltaste nach unten zweimal drücken, sollte es echo 2verfügbar sein). Sie müssen in einem bestimmten Terminal einen Befehl eingeben, um auf das Geschriebene zugreifen zu können.

Antwort3

Ich habe eine große Verlaufsdatei mit etwa 100.000 Einträgen und die Varianten, die die Verlaufsliste löschen und die gesamte Verlaufsdatei lesen (mit history -cund history -r), führen zu einer merklichen Verzögerung (vielleicht 0,2 Sekunden), bevor die Eingabeaufforderung angezeigt wird. Die Verwendung von , history -nsodass nur neue Zeilen aus der Verlaufsdatei gelesen werden, ist schneller:

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

PROMPT_COMMANDmuss nicht exportiert werden, da es eine Shell-Variable ist.

Antwort4

Ein Hinweis für alle anderen Antworten (die im Grunde dasselbe sind):

Das Einstellen PROMPT_COMMAND="history -a;$PROMPT_COMMAND"in den .bashrc(oder bei Freunden) ist ausreichend.

Sie können es auch manuell ausführen, history -awann immer Sie möchten, einen „Schnappschuss“ des Verlaufs in der aktuellen Sitzung zu erstellen.

Der Befehl shopt -s histappendwird nicht benötigt, da history -aer der Datei immer neue Zeilen anfügt und sie nie überschreibt. Außerdem ist dies, zumindest seit Bash 4, histappenddas Standardverhalten.

verwandte Informationen