web-dev-qa-db-fra.com

Historique des commandes dans Zsh

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)

66

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.

  • Si l'une des 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.
    Notez que même sous ces paramètres, zsh écrase parfois le fichier comme décrit ci-dessous pour le réduire à sa taille.
  • Sinon, si l'option 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.
  • Sinon, zsh écrase le fichier existant en place.

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).