Chaque fois que j'ouvre une nouvelle instance d'un terminal, l'historique est vide. Pourquoi donc? Dois-je configurer quelque chose? En bash, cela n'est pas nécessaire.
Chaque fois que j'ouvre une nouvelle instance d'un terminal, l'historique est vide. Pourquoi donc? Dois-je configurer quelque chose? En bash, cela n'est pas nécessaire.
Réponses:
Bash et zsh ont des valeurs par défaut différentes. Zsh n'enregistre pas l'historique dans un fichier par défaut.
Lorsque vous exécutez zsh sans fichier de configuration, il affiche une interface de configuration. Dans cette interface de configuration, sélectionnez
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
puis passez en revue les paramètres proposés et sélectionnez
# (0) Remember edits and return to main menu (does not save file yet)
Répétez l'opération pour les autres sous-menus pour (2) l'achèvement, (3) les raccourcis clavier et (4) les options, puis sélectionnez
(0) Exit, saving the new settings. They will take effect immediately.
dans le menu principal.
Les paramètres liés à l'historique recommandés sont
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
J'utiliserais un nom différent pour le fichier historique, pour indiquer qu'il s'agit du fichier historique de zsh. Et 1000 lignes peuvent être augmentées sur un système moderne.
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
Soit dit en ~/.zshrc
passant, ces lignes entrent .
Bien que la réponse actuelle soit correcte, j'ai pensé qu'il valait la peine d'ajouter qu'il existe peut-être une meilleure option que appendhistory
de sauvegarder votre historique, et c'est le cas SHARE_HISTORY
.
À partir de la documentation, SHARE_HISTORY
"importe à la fois de nouvelles commandes à partir du fichier historique et entraîne également l'ajout de vos commandes tapées au fichier historique". Cela signifie que les obus sont également conscients de l'histoire de l'autre sans avoir à fermer l'actuelle ou à en ouvrir une nouvelle.
Donc, tous ensemble, vous le définissez comme ceci:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
, qui écrit dans l'historique de tous les terminaux comme ci-dessus, mais cet historique "ne sera pas disponible immédiatement à partir d'autres instances du shell qui utilisent le même fichier d'historique". Cela a plus de sens pour moi, car je peux alors parcourir l'historique de chaque terminal indépendamment, mais tout est toujours connecté.
INC_APPEND_HISTORY_TIME
pourrait être plus logique. Je n'aurais probablement pas dû dire "mieux", je suppose que c'est juste une question de préférence personnelle à ce stade!
lorsque vous passez de bash à zsh pour la première fois, votre historique bash ne sera pas transféré. Donc, tout l'historique que vous aviez dans bash est toujours dans le fichier historique de bash. zsh commence à capturer l'historique à partir du moment où vous commencez à l'utiliser comme shell.
Si vous ne l'avez pas configuré pour capturer l'historique, vous pouvez réexécuter l'assistant de configuration et indiquer à zsh la quantité d'historique à enregistrer. Modifiez le nom de ~ / .zshrc ou supprimez-le pour obtenir une nouvelle photo de l'assistant.
Si cela ne fonctionne pas et que tout cela est déjà en place, essayez:
fc -W
Cela écrit l'historique actuel dans le fichier historique. Et si vous obtenez:
zsh: locking failed for /home/username/.zsh_history: permission denied
il est alors temps de vérifier les autorisations sur le fichier et sur le répertoire parent.
zsh
, maisbash
écrit par défaut dans ses fichiers d'historique à la sortie , ce qui signifie que si vous ne l'avez pas utilisé auparavant et ouvrez certains shells, ils afficheront tous maintenant l'historique jusqu'à ce qu'au moins un se déconnecte, écrivant ainsi son fichier d'historique.