Geschichte ist in zsh nicht erhalten

14

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.

Gilles 'SO - hör auf böse zu sein'
quelle
Sie sind sich nicht sicher zsh, bashschreiben 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.
DopeGhoti

Antworten:

20

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.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Obwohl die vorhandene Antwort korrekt ist, dachte ich, es könnte sich lohnen, hinzuzufügen, dass es möglicherweise eine bessere Option gibt, als appendhistoryIhren 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
bert
quelle
1
+1 und willkommen bei U / L, aber ich persönlich bevorzuge es 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.
Sparhawk
2
Vielen Dank! Ja, das ist fair genug und ich kann völlig verstehen 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!
Bert
0

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.

LocoCoyote
quelle
0

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 .

Chris Snyder
quelle