Où placer les assertions variables $ PATH dans zsh?

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

Je me rends compte qu’avoir quelque chose à l’intérieur des fichiers bash n’a pas beaucoup de sens vu que j’utilise zsh , mais où dois-je placer mes rvm , python , node etc à mon $PATH ?

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

version tl; dr: utilisez ~/.zshrc

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

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


En ce qui concerne mon commentaire

Dans mon commentaire joint à la réponse de kev , j’ai dit:

Cela semble être incorrect – / etc / profile n’est pas répertorié dans la documentation zsh que je peux trouver.

Cela s’avère être partiellement incorrect: /etc/profile peut être généré par zsh . Cependant , cela ne se produit que si zsh est “invoqué en tant que sh ou ksh “; dans ces modes de compatibilité:

Les scripts de démarrage / arrêt habituels de zsh ne sont pas exécutés. Login shells source / etc / profile suivi de $ HOME / .profile. Si la variable d’environnement ENV est définie lors de l’appel, $ ENV provient des scripts de profil. La valeur de ENV est soumise à l’extension des parameters, à la substitution de commande et à l’expansion arithmétique avant d’être interprétée comme un chemin d’access. [ man zshall, “Compatibilité” ].

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 lors de la connexion – je n’ai aucune expérience du projet Arch Linux; le wiki peut être correct pour cette dissortingbution, mais ce n’est généralement pas correct. Les informations sont incorrectes par rapport aux pages du manuel zsh, et ne semblent pas s’appliquer à zsh sous OS X (les chemins dans $PATH définis dans /etc/profile ne parviennent pas à mes sessions zsh).


Pour répondre à la question:

où dois-je placer mes ajouts de rvm, python, node etc à mon $ PATH?

En général, je voudrais exporter mon $PATH depuis ~/.zshrc , mais cela vaut la peine de lire la page de manuel de zshall , en particulier la section “STARTUP / SHUTDOWN FILES” – ~/.zshrc est lu pour les shells interactifs , qui peuvent ou peuvent ne correspond pas à vos besoins – si vous voulez que $PATH pour chaque shell zsh invoqué par vous ( interactive et non, login et non, etc.), alors ~/.zshenv est une meilleure option.

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

Il y a un tas de fichiers lus au démarrage (vérifiez les pages de man liées), et il y a une raison à cela – chaque fichier a sa place particulière (parameters pour chaque utilisateur, parameters spécifiques à l’utilisateur, parameters pour les shells de connexion, parameters pour chaque shell) , etc).
Ne vous inquiétez pas à propos de ~/.zshenv pas – si vous en avez besoin, faites-le, et il sera lu.

.bashrc et .bash_profile ne sont pas lus par zsh , à moins que vous ne les ~/.zshrc explicitement à partir de ~/.zshrc ou similaire; la syntaxe entre bash et zsh n’est pas toujours compatible. Les deux .bashrc et .bash_profile sont conçus pour les parameters bash , pas les parameters zsh .

Voici les documents des pages de manuel zsh sous 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. 

De cela, nous pouvons voir que les fichiers de commande sont lus:

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

J’ai eu le même problème (en bash la commande du terminal fonctionnait correctement mais zsh montrait la commande non trouvée d’erreur)

Solution:

il suffit de coller ce que vous avez collé précédemment dans ~ / .bashrc pour:

 ~/.zshrc