Historique des commandes en Zsh

62

Comment Zsh garde-t-il une trace de l'historique des commandes?

Je vois deux fichiers dans mon répertoire personnel: .zhistoryet .zsh_history. Quelle est la différence entre eux? Les fichiers semblent contenir toute mon histoire. Zsh continue-t-il d'ajouter des lignes à l'une d'elles pour toujours ? Cela ne rendrait-il pas la recherche d'histoire trop lente?

Puis-je créer en toute sécurité ces fichiers des liens symboliques vers un autre emplacement? (par exemple, un dépôt git pour garder trace des modifications apportées à l'historique)

Amelio Vazquez-Reina
la source
Vérifiez vos options ~/.zshrcet / ou les /etc/zshrcoptions décrites ici zsh.sourceforge.net/Guide/zshguide02.html#l17
UVV

Réponses:

79

Zsh stocke les lignes d'entrée (éventuellement avec des informations temporelles) dans le fichier indiqué par la variable HISTFILE. Cela devrait être un nom de fichier absolu (sinon, il sera interprété en fonction du répertoire en cours à ce moment-là).

Zsh n'a pas de valeur par défaut intégrée pour HISTFILE. La distribution zsh est fournie avec un assistant de configuration pour les nouveaux utilisateurs, qui a la valeur ~/.histfileintégrée. C'est donc ce que les utilisateurs de zsh obtiennent par défaut. Oh-my-zsh est livré avec un HISTFILE=.zhistorypréréglage. On dirait que vous avez essayé zsh avec la configuration par défaut et avec oh-my-zsh. Vérifiez votre .zshrc(ou les dates du fichier) pour voir celui que vous utilisez actuellement.

Comment 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éfinie par défaut), inc_append_historyou share_historyest définie, ou si l'historique est explicitement enregistré avec fc -AI, zsh est ajouté au fichier existant.
    Notez que même avec ces paramètres, zsh écrase parfois le fichier comme décrit ci-dessous pour le réduire.
  • Sinon, si l'option hist_save_by_copyest définie (elle est définie par défaut depuis zsh 5.0, mais n'existe pas dans la version 4.2), zsh écrit un fichier temporaire puis le déplace en place une fois l'opération terminée. 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 à la place.

Plutôt que de pointer zsh sur un lien symbolique, définissez-le HISTFILEà l'emplacement souhaité pour le fichier d'historique.

Le nombre de lignes d’historique conservées est configuré via les variables HISTSIZEet SAVEHIST. HISTSIZEcorrespond au nombre maximal de lignes conservées dans une session et SAVEHISTau nombre maximal de lignes conservées dans le fichier historique.

Pour que l’historique soit sauvegardé, vous devez définir les deux HISTFILEet SAVEHIST, la valeur par défaut SAVEHISTétant 0. Vous pouvez également vouloir augmenter HISTSIZE(à partir de zsh 5.0, la valeur par défaut n’est que de 30).

Gilles, arrête de faire le mal
la source