Immer wenn ich eine neue Instanz eines Terminals öffne, ist der Verlauf leer. Warum das? Muss ich etwas einrichten? In Bash ist dies jedoch nicht erforderlich.
Immer wenn ich eine neue Instanz eines Terminals öffne, ist der Verlauf leer. Warum das? Muss ich etwas einrichten? In Bash ist dies jedoch nicht erforderlich.
Antworten:
Bash und zsh haben unterschiedliche Standardeinstellungen. Zsh speichert den Verlauf standardmäßig nicht in einer Datei.
Wenn Sie zsh ohne Konfigurationsdatei ausführen, wird eine Konfigurationsoberfläche angezeigt. Wählen Sie in dieser Konfigurationsoberfläche
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
Überprüfen Sie dann die vorgeschlagenen Einstellungen und wählen Sie
# (0) Remember edits and return to main menu (does not save file yet)
Wiederholen Sie diesen Vorgang für die anderen Untermenüs für (2) Vervollständigung, (3) Tastenkombinationen und (4) Optionen und wählen Sie dann
(0) Exit, saving the new settings. They will take effect immediately.
aus dem Hauptmenü.
Die empfohlenen Einstellungen für den Verlauf sind
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
Ich würde einen anderen Namen für die Verlaufsdatei verwenden, um anzuzeigen, dass es sich um die Verlaufsdatei von zsh handelt. Auf einem modernen System können 1000 Zeilen erhöht werden.
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
Diese Zeilen gehen ~/.zshrc
übrigens hinein.
Obwohl die vorhandene Antwort korrekt ist, dachte ich, es könnte sich lohnen, hinzuzufügen, dass es möglicherweise eine bessere Option gibt, als appendhistory
Ihren Verlauf zu speichern, und dies ist SHARE_HISTORY
.
Aus den Dokumenten SHARE_HISTORY
"beide importieren neue Befehle aus der Verlaufsdatei und bewirken auch, dass Ihre eingegebenen Befehle an die Verlaufsdatei angehängt werden". Dies bedeutet, dass Shells auch die Geschichte des anderen kennen, ohne die aktuelle schließen oder eine neue öffnen zu müssen.
Alles in allem würden Sie es also so einstellen:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
, das von allen Terminals wie oben in den Verlauf schreibt, aber dieser Verlauf "wird nicht sofort von anderen Instanzen der Shell verfügbar sein, die dieselbe Verlaufsdatei verwenden". Dies ist für mich sinnvoller, da ich dann den Verlauf jedes Terminals unabhängig durchlaufen kann, aber immer noch alles protokolliert ist.
INC_APPEND_HISTORY_TIME
, warum dies logischer sein könnte. Ich hätte wahrscheinlich nicht "besser" sagen sollen, ich denke, es ist an dieser Stelle nur eine Frage der persönlichen Präferenz!
Wenn Sie zum ersten Mal von Bash zu Zsh wechseln, wird Ihr Bash-Verlauf nicht übertragen. Der gesamte Verlauf, den Sie in bash hatten, befindet sich also immer noch in der Verlaufsdatei von bash. zsh beginnt mit der Erfassung des Verlaufs ab dem Zeitpunkt, an dem Sie ihn als Shell verwenden.
Wenn Sie es nicht für die Erfassung des Verlaufs eingerichtet haben, können Sie den Konfigurationsassistenten erneut ausführen und zsh mitteilen, wie viel Verlauf gespeichert werden soll. Ändern Sie entweder den Namen von ~ / .zshrc oder löschen Sie ihn, um eine neue Aufnahme des Assistenten zu erhalten.
Wenn es nicht funktioniert und all dies bereits vorhanden ist, versuchen Sie Folgendes:
fc -W
Dadurch wird der aktuelle Verlauf in die Verlaufsdatei geschrieben. Und wenn Sie bekommen:
zsh: locking failed for /home/username/.zsh_history: permission denied
Dann ist es Zeit, die Berechtigungen für die Datei und das übergeordnete Verzeichnis zu überprüfen .
zsh
,bash
schreiben aber beim Beenden standardmäßig in seine Verlaufsdateien. Wenn Sie diese zuvor noch nicht verwendet und einige Shells geöffnet haben, wird der Verlauf jetzt angezeigt, bis sich mindestens einer abmeldet und die Verlaufsdatei geschrieben wird.