1 votes

Quel est le fichier correct pour stocker les variables d'environnement pour zsh?

Je suis un peu confus quant à la façon dont tout cela fonctionne. Apparemment, chaque tutoriel me dit quelque chose de différent. Jusqu'à présent, il y a environ 4 fichiers différents auxquels je peux ajouter des variables d'environnement :

.zshrc

.profil

.zprofil

.zshenv

Dans quel fichier devrais-je ajouter des variables d'environnement ? Jusqu'à présent, j'ai des variables dans chacun d'entre eux, ainsi que d'autres choses comme des alias.

Est-ce vraiment important, ou existe-t-il une norme correcte à suivre ?

Édition : Question fermée car elle est de nature 'basée sur l'opinion'. Pour clarifier, veuillez fournir uniquement des réponses factuelles et non des opinions.

3voto

yoliho Points 340

Il existe une norme telle que définie dans le manuel zsh https://zsh.sourceforge.io/Doc/Release/Files.html#Startup_002fShutdown-Files

Malheureusement, Apple ne les a pas lus entièrement et donc pour macOS il y a une légère différence.

Le fichier dans lequel les variables diffèrent car les fichiers sont lus différemment en fonction de la manière dont le shell est lancé.

Donc, étant donné les fichiers que vous répertoriez

.profile

Rien à voir avec zsh - c'est le seul fichier que sh lit. (bash le lira comme un shell de connexion s'il n'y a pas de .bash_profile

.zshenv

Ce fichier est lu par tous les shells zsh lors de leur démarrage. Donc, toute variable d'environnement commune devrait être ici. Cela inclut $PATH si vous suivez le manuel zsh; cependant Apple n'a pas pris en compte cela et dans /etc/zshrc qui est lu après, ils ajoutent et réorganisent le $PATH

Ce fichier est lu par les scripts.

.zshenv est sourcé sur toutes les invocations du shell, sauf si l'option -f est définie. Il devrait contenir des commandes pour définir le chemin de recherche des commandes, plus d'autres variables d'environnement importantes. .zshenv ne doit pas contenir de commandes qui produisent une sortie ou supposent que le shell est attaché à un tty.

.zprofile et .zlogin

Appelé à la connexion - cela se produit sur chaque Terminal sur macOS mais seulement une fois sur les autres Unix

.zlogin est sourcé dans les shells de connexion. Il devrait contenir des commandes qui ne doivent être exécutées que dans des shells de connexion. .zlogout est sourcé lorsque les shells de connexion se ferment. .zprofile est similaire à .zlogin, sauf qu'il est sourcé avant .zshrc. .zprofile est destiné comme une alternative à .zlogin pour les fans de ksh; les deux ne sont pas censés être utilisés ensemble, bien que cela puisse certainement être fait si désiré.

.zlogin n'est pas l'endroit pour les définitions d'alias, options, réglages de variables d'environnement, etc.; en règle générale, il ne devrait pas changer l'environnement du shell du tout. Il devrait plutôt être utilisé pour définir le type de terminal et exécuter une série de commandes externes (fortune, msgs, etc).

.zshrc

Ceci est lu dans un shell interactif, c'est-à-dire lorsque vous exécutez le shell pour taper des choses.

.zshrc est sourcé dans des shells interactifs. Il devrait contenir des commandes pour configurer des alias, des fonctions, des options, des liaisons de touches, etc.

Aussi sur macOS, c'est ici que vous devez modifier le $PATH pour corriger l'ordre modifié par Apple avec /usr/libexec/path_helper

0voto

Tyler Durden Points 109

En conformité avec les normes de Bash et .bashrc, vous pouvez vous sentir en sécurité en stockant les variables d'environnement pour zsh dans .zshrc.

Explication officielle de l'ordre de chargement et de la finalité des fichiers de configuration sont dans le manuel de zsh :

FICHIERS DE DÉMARRAGE/ARRÊT

       Les commandes sont d'abord lues depuis /etc/zshenv ; cela ne peut pas être remplacé. 
       Le comportement ultérieur est modifié par les options RCS et GLOBAL_RCS ; le premier affecte tous les fichiers de démarrage, tandis que le second n'affecte que les  fichiers de démarrage globaux (ceux indiqués ici avec un chemin commençant par un / ). Si l'une des options est désactivée à un moment donné, tout fichier de démarrage ultérieur du type correspondant ne sera pas lu. Il est également possible qu'un fichier en  $ZDOTDIR réactive GLOBAL_RCS.  RCS et GLOBAL_RCS sont tous deux activés par défaut.

       Les commandes sont ensuite lues depuis $ZDOTDIR/.zshenv. Si le shell est un shell de connexion, les commandes sont lues depuis /etc/zprofile  puis  $ZDOTDIR/.zpro-
       file.   Ensuite, si le shell est interactif, les commandes sont lues depuis
       /etc/zshrc et ensuite $ZDOTDIR/.zshrc. Enfin, si le shell est un shell de connexion, /etc/zlogin et $ZDOTDIR/.zlogin sont lus.

       Lorsqu'un shell de connexion se termine, les fichiers $ZDOTDIR/.zlogout  puis
       /etc/zlogout sont lus. Cela se produit soit par une sortie explicite via
       les commandes exit ou logout, soit par une sortie  implicite en lisant la fin du fichier
       depuis le terminal. Cependant, si le shell se termine en exécutant
       un autre processus, les fichiers de déconnexion ne sont pas lus.  Cela est également
       affecté par les options RCS et GLOBAL_RCS.  Notez également que l'option RCS
       affecte la sauvegarde des fichiers historiques, c'est-à-dire que si RCS n'est plus
       activé lorsque le shell se termine, aucun fichier historique ne sera sauvegardé.

       Si ZDOTDIR n'est pas défini, HOME est utilisé à la place. Les fichiers énumérés ci-dessus comme étant dans /etc peuvent être dans un autre répertoire, en fonction de l'installation.

       Comme /etc/zshenv est exécuté pour toutes les instances de zsh, il est important de le 
       garder aussi petit que possible. En particulier, il est conseillé de
       mettre le code qui n'a pas besoin d'être exécuté à chaque shell 
       derrière un test de la forme `if [[ -o rcs ]]; then ... ' pour qu'il ne soit pas exécuté
       lorsque zsh est invoqué avec l'option `-f'.

       N'importe lequel de ces fichiers peut être pré-compilé avec la commande intégrée zcompile (voir zshbuiltins(1)). Si un fichier compilé existe (nommé d'après
       le fichier original suivi de l'extension .zwc) et qu'il est plus récent que le fichier d'origine,
       le fichier compilé sera utilisé à la place.

FICHIERS

  • $ZDOTDIR/.zshenv
  • $ZDOTDIR/.zprofile
  • $ZDOTDIR/.zshrc
  • $ZDOTDIR/.zlogin
  • $ZDOTDIR/.zlogout
  • ${TMPPREFIX}* (par défaut /tmp/zsh*)
  • /etc/zshenv
  • /etc/zprofile
  • /etc/zshrc
  • /etc/zlogin
  • /etc/zlogout (spécifique à l'installation - /etc est la valeur par défaut)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X