Ich öffne oft sehr viele Terminals [Im Moment sind 7 in diesem Arbeitsbereich geöffnet] und ich suche oft history
mit grep
, um einen Befehl zu finden, den ich gerade geschrieben habe, aber ich möchte nicht das Terminal suchen und dann nach oben scrollen und danach mehr suchen, etc .. Manchmal schließen sich meine Terminals ohne "Verlassen", und alles, was ich geschrieben habe, geht verloren [Manchmal brauchte ich etwas, das ich in einem Terminal geschrieben hatte, das getötet wurde].
Gibt es eine Möglichkeit, dies so zu gestalten, dass jedes Terminal sofort in .bash_history schreibt? oder mindestens einmal in der Minute oder so?
control-r
, um die Befehlshistorie einer Bash rückwärts zu durchsuchen. Bequemer alshistory | grep
wenn Sie keinen regulären Ausdruck benötigen.Antworten:
Eine einfache Lösung, wie im Abschnitt Aktualisieren des Bash-Verlaufs in Echtzeit beschrieben .
Es heißt, diese Befehle in der .bashrc-Konfiguration abzulegen:
Der erste Befehl ändert den
.history
Dateimodus zum Anhängen. Mit der zweiten Option wird derhistory -a
Befehl so konfiguriert , dass er an jeder Shell-Eingabeaufforderung ausgeführt wird. Der-a
schreibt sofort die aktuellen / neuen Zeilen in die History-Datei.Verwandte für zsh:
quelle
Versuchen Sie dies in Ihre
.bashrc
:Gutschrift 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 den Betrag von reduziert$HISTSIZE
.history -r
Lesen Sie den Inhalt von$HISTFILE
und fügen Sie ihn in den aktuellen Sitzungsverlauf ein. Dies erhöht den Verlaufszähler um die Anzahl der Zeilen in$HISTFILE
.Ich denke, es bedeutet, dass die Befehle fast sofort verfügbar sind (Sie haben ein Terminal, schreiben
echo 1
, zweites Terminalecho 2
, zuerstecho 3
und wenn Sie den Pfeil zweimal nach unten drücken, sollten Sieecho 2
verfügbar sein. Sie müssen einen Befehl in einem bestimmten Terminal eingeben, um Zugriff auf das zu haben, was hat geschrieben worden.quelle
man history
bash
integrierter Befehl, wie in beschriebenman bash
. Sie können auch verwendenhelp history
.-r
und dem mit-c
nur-a
.history -c; history -r
? Ich denke, es ist besser für dich, es wäre nur manchmal besser für mich. Ich benutze oft mehrere Muscheln, um einen Job zu erledigen, also bevorzuge ich es, die Geschichte so gut wie möglich zu kombinieren. Eigentlich stört es mich, dass der Befehl erst nach seiner Beendigung in die Geschichte geschrieben wird. Wenn ich eine SSH-Sitzung für einen Host starte und eine andere öffnen möchte, während die erste noch ausgeführt wird, muss ich sie normalerweise erneut eingeben, da sie noch nicht in den Verlauf geschrieben wurde.history -a
könnte ausreichenIch habe eine große Verlaufsdatei mit ungefähr 100000 Einträgen, und die Varianten, die die Verlaufsliste löschen und die gesamte Verlaufsdatei lesen (mit
history -c
undhistory -r
), führen zu einer merklichen Verzögerung (möglicherweise 0,2 Sekunden), bevor die Eingabeaufforderung angezeigt wird. Die Verwendung,history -n
damit nur neue Zeilen aus der Verlaufsdatei gelesen werden, ist schneller:PROMPT_COMMAND
muss nicht exportiert werden, da es sich um eine Shell-Variable handelt.quelle
Ein Hinweis für alle anderen Antworten (die im Grunde genommen dasselbe sind):
Das Einstellen
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
der.bashrc
(oder der Freunde) reicht aus.Sie können
history -a
den Verlauf in der aktuellen Sitzung auch jederzeit manuell als "Momentaufnahme" ausführen .Der Befehl
shopt -s histappend
wird nicht benötigt, dahistory -a
immer neue Zeilen an die Datei angehängt werden und diese niemals überschrieben wird. Zumindest ab Bash 4histappend
ist dies das Standardverhalten.quelle
shopt -s histappend
. Beachten Sie auch, dass ich es um~/.bash_profile
histappend
, da dies das Standardverhalten ist. Ich würde danach suchen, aber ich habe keinen Zugang zu einem Mac.