web-dev-qa-db-fra.com

Où placer les assertions de variable $ PATH dans zsh?

J'aime zsh, mais je ne sais pas où placer mon $PATH et autres assertions variables? Je trouve qu'ils sont dispersés entre les fichiers .zshrc.zprofile.bashrc.bash_profile, et parfois doublé.

Je me rends compte qu'avoir quoi que ce soit à l'intérieur des fichiers bash n'a pas beaucoup de sens car j'utilise zsh, mais où devrais-je placer exactement mon rvm, python, node etc additions à mes $PATH?

Y a-t-il un fichier spécifique que je devrais utiliser (c'est-à-dire .zshenv qui n’existe pas dans mon installation), l’un de ceux que j’utilise actuellement ou est-ce vraiment important?

88
stefmikhail

tl; dr version: utilisez ~/.zshrc

Et lisez la page de manuel pour comprendre les différences entre:

~/.zshrc, ~/.zshenv et ~/.zprofile.


Concernant mon commentaire

Dans mon commentaire joint à la réponse kev a donné , j'ai dit:

Cela semble être incorrect -/etc/profile ne figure dans aucune documentation zsh que je puisse trouver.

Cela s'avère être partiellement incorrect: /etc/profile peut provenir de zsh. Cependant , cela ne se produit que si zsh est "invoqué comme sh ou ksh"; dans ces modes de compatibilité:

Les scripts de démarrage/arrêt zsh habituels ne sont pas exécutés. Les shells de connexion source/etc/profile suivis de $ HOME/.profile. Si la variable d'environnement ENV est définie lors de l'appel, $ ENV est généré après les scripts de profil. La valeur de ENV est soumise à une expansion de paramètre, à une substitution de commande et à une expansion arithmétique avant d'être interprétée comme un chemin. [ man zshall, "Compatibility" ].

Le lien ArchWiki ZSH dit:

Lors de la connexion, Zsh source les fichiers suivants dans cet ordre:
/etc/profile
Ce fichier provient de tous les shells compatibles Bourne lors de la connexion.

Cela implique que /etc/profile est toujours lu par zsh au moment de la connexion - je n’ai aucune expérience du projet Arch Linux; le wiki est peut-être correct pour cette distribution, mais il est généralement correct pas. Les informations sont incorrectes par rapport aux pages de manuel de zsh et ne semblent pas s'appliquer à zsh sous OS X (chemins dans $PATH s'installer /etc/profile ne participez pas à mes sessions zsh).



Pour répondre à la question:

où devrais-je placer exactement mes ajouts rvm, python, nœud, etc. à mon $ PATH?

En règle générale, j'exporterais mon $PATH de ~/.zshrc, mais il est utile de lire la page de manuel zshall , plus précisément la section "FICHIERS DE DÉMARRAGE/ARRÊT" - ~/.zshrc est lu pour interactif shell, ce qui peut ou non convenir à vos besoins - si vous voulez le $PATH pour chaque zsh Shell invoqué par vous (interactive et non, login et non, etc.), puis ~/.zshenv est une meilleure option.

Existe-t-il un fichier spécifique que je devrais utiliser (c'est-à-dire .zshenv et qui n'existe pas actuellement dans mon installation), un de ceux que j'utilise actuellement ou est-ce même important?

Il y a beaucoup de fichiers lus au démarrage (vérifiez les pages man liées), et il y a une raison à cela - chaque fichier a sa place (paramètres pour chaque utilisateur, paramètres pour chaque utilisateur, paramètres pour les shells de connexion) , réglages pour chaque shell, etc.).
Ne vous inquiétez pas pour ~/.zshenv non existant - si vous en avez besoin, créez-le et il sera lu.

.bashrc et .bash_profilesont pas lus par zsh, à moins que vous ne les utilisiez explicitement depuis ~/.zshrc ou similaire; la syntaxe entre bash et zsh est pas toujours compatible. Tous les deux .bashrc et .bash_profile sont conçus pour bash paramètres, pas zsh paramètres.

123
simont

Voici la documentation des pages de manuel zsh dans la section STARTUP/SHUTDOWN FILES.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the Shell is a  login
   Shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  Shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the Shell is a login
   Shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

À partir de cela, nous pouvons voir que les fichiers de commande sont lus comme suit:

/etc/zshenv    # Read for every Shell
~/.zshenv      # Read for every Shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

Vous pouvez obtenir plus d'informations ici .

26
jor

J'ai eu un problème similaire (dans la commande de terminal bash fonctionnait correctement, mais zsh a montré une erreur d'erreur non trouvée)

Solution:


collez simplement ce que vous avez déjà été collé dans ~/.bashrc à:

~/.zshrc
13
abe312