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?
tl; dr version: utilisez ~/.zshrc
Et lisez la page de manuel pour comprendre les différences entre:
~/.zshrc
,~/.zshenv
et~/.zprofile
.
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).
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_profile
sont 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.
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 .
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)
collez simplement ce que vous avez déjà été collé dans ~/.bashrc à:
~/.zshrc