Comment Zsh garde-t-il l'historique des commandes?
Je vois deux fichiers dans mon répertoire personnel: .zhistory
et .zsh_history
. Quelle est la différence entre eux? Les fichiers semblent contenir tous de mon historique. Est-ce que Zsh continue d'ajouter des lignes à l'un d'eux pour toujours ? Cela ne rendrait-il pas la recherche historique trop lente?
Puis-je créer des liens symboliques vers ces fichiers en toute sécurité? (par exemple, un référentiel git pour garder une trace des modifications apportées à l'historique)
Zsh stocke les lignes d'entrée (éventuellement avec des informations temporelles) dans le fichier indiqué par la variable HISTFILE
. Il doit s'agir d'un nom de fichier absolu (sinon il sera interprété par rapport au répertoire courant à ce moment-là).
Zsh n'a pas de valeur par défaut intégrée pour HISTFILE
. La distribution zsh est livrée avec un assistant de configuration pour les nouveaux utilisateurs qui a la valeur ~/.histfile
intégré, c'est donc ce que les utilisateurs de zsh obtiennent par défaut. Oh-my-zsh est livré avec HISTFILE=.zhistory
préréglé. Il semble donc que vous ayez essayé zsh avec la configuration par défaut et avec oh-my-zsh. Vérifier votre .zshrc
(ou les dates des fichiers) pour voir celle que vous utilisez actuellement.
La façon dont zsh ouvre le fichier, et donc ce qui se passe s'il s'agit d'un lien symbolique, dépend de plusieurs options.
append_history
(défini par défaut), inc_append_history
ou share_history
est défini, ou lorsque l'historique est enregistré explicitement avec fc -AI
, zsh s'ajoute au fichier existant.hist_save_by_copy
est défini (il est défini par défaut depuis zsh 5.0, mais n'existe pas en 4.2), zsh écrit un fichier temporaire puis le déplace en place une fois terminé. Dans ce cas, si le fichier d'historique était un lien symbolique, le nouveau fichier remplace le lien symbolique.Plutôt que de pointer zsh vers un lien symbolique, définissez HISTFILE
à l'endroit où vous souhaitez que le fichier d'historique se trouve.
Le nombre de lignes d'historique conservées est configuré via les variables HISTSIZE
et SAVEHIST
. HISTSIZE
est le nombre maximal de lignes conservées dans une session et SAVEHIST
est le nombre maximal de lignes conservées dans le fichier d'historique.
Pour obtenir un historique enregistré, vous devez définir à la fois HISTFILE
et SAVEHIST
, car la valeur par défaut de SAVEHIST
est 0. Vous souhaiterez peut-être augmenter HISTSIZE
également (à partir de zsh 5.0, la valeur par défaut n'est que de 30).