Ich öffne oft sehr viele Terminals (im Moment habe ich in diesem Arbeitsbereich sieben geöffnet) und suche oft history
nach grep
einem 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 exit
und 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_history
sofort 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 -a
Befehl so, dass er bei jeder Shell-Eingabeaufforderung ausgeführt wird. Die -a
Option bewirkt, dass history
die 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 -c
löscht den Verlauf der laufenden Sitzung. Dadurch wird der Verlaufszähler um die Anzahl von reduziert $HISTSIZE
. history -r
liest den Inhalt von $HISTFILE
und 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 3
und wenn Sie die Pfeiltaste nach unten zweimal drücken, sollte es echo 2
verfü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 -c
und history -r
), führen zu einer merklichen Verzögerung (vielleicht 0,2 Sekunden), bevor die Eingabeaufforderung angezeigt wird. Die Verwendung von , history -n
sodass nur neue Zeilen aus der Verlaufsdatei gelesen werden, ist schneller:
shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
PROMPT_COMMAND
muss 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 -a
wann immer Sie möchten, einen „Schnappschuss“ des Verlaufs in der aktuellen Sitzung zu erstellen.
Der Befehl shopt -s histappend
wird nicht benötigt, da history -a
er der Datei immer neue Zeilen anfügt und sie nie überschreibt. Außerdem ist dies, zumindest seit Bash 4, histappend
das Standardverhalten.