J'utilise zsh
comme Shell et j'essaie de configurer mon environnement.
Je définis généralement ma variable $Java_HOME
en créant un fichier:
/etc/profile.d/Java.sh
avec le contenu suivant
export Java_HOME=/path/to/jdk
export PATH=$Java_HOME/bin:$PATH
puis je me déconnecte, puis je rentre, et tout fonctionne, mais pour une raison quelconque, la variable PATH
n'est pas définie. Il reconnaît Java_HOME
, mais pas le nouveau PATH
name__, voir l'extrait de terminal suivant:
~ echo $Java_HOME
/usr/lib/jvm/jdk1.8.0_05
~ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
et je l'ai confirmé en essayant d'exécuter une commande sous forme de jvm
~ Java -version
zsh: command not found: Java
le PATH
n'inclut pas le $Java_HOME
comme il se doit. Y a-t-il autre chose que je devrais vérifier?
J'ai vérifié que si je cours:
source /etc/profile.d/Java.sh
tout fonctionne correctement et mes variables sont définies comme elles le devraient, mais les scripts de /etc/profile.d
ne doivent-ils pas s'exécuter automatiquement?
De mon point de vue, la meilleure méthode consiste à ajouter les lignes suivantes dans le fichier ~/.zshrc
(si vous ne l'avez pas déjà, créez-le):
if [ -d "/path/to/jdk" ] ; then
export PATH="/path/to/jdk/bin:$PATH"
fi
Puis redémarrez votre zsh
ou exécutez simplement source ~/.zshrc
et votre PATH devrait alors être exactement comme vous le souhaitez.
Ou, si vous souhaitez apporter la modification à l'ensemble du système, ajoutez le code précédent à la fin du fichier /etc/zsh/zshenv
.
Mais dans tous les cas, n'utilisez pas /etc/profile.d
pour exécuter automatiquement des scripts dans zsh
. Ce répertoire est utile uniquement pour le shell bash
, et non pas zsh
comme dans votre cas. Pour comprendre cela, ouvrez le fichier /etc/profile
, qui est un fichier d’initialisation bash et en aucun cas zsh fichier d'initialisation , et vous verrez quelque part à la fin du fichier:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
Ainsi, vos scripts du répertoire /etc/profile.d
seront automatiquement exécutés dans zsh
uniquement si vous ajoutez le code précédent dans un fichier d’initialisation zsh, comme par exemple /etc/zsh/zprofile
ou source /etc/profile
dans le fichier /etc/zsh/zprofile
.
Je trouve que tout placer dans un fichier .zshenv
devient rapidement difficile à gérer. Je recommande d'installer oh-my-sh , puis de placer diverses personnalisations (env. Vars, fonctions) dans le répertoire .oh-my-sh/custom/
sous la forme de fichiers .zsh
séparés.
J'ai également découvert que cette approche fonctionne parfaitement lorsque ssh'ing dans la machine lors de la modification de variables env telles que PATH
. En outre, cela fonctionne vraiment bien avec vcsh pour conserver les personnalisations sauvegardées et synchronisées.
Étant donné que Java_HOME
est défini, vous avez confirmé que ces scripts proviennent automatiquement, n'est-ce pas?
La seule explication logique est que PATH
est défini ultérieurement d'une manière ou d'une autre. Il devrait être défini à l'origine par PAM, qui lit /etc/environment
, et autant que je sache, cela se produit avant que les fichiers /etc/profile.d/*.sh
soient générés. Peut-être que zsh fonctionne différemment de bash à cet égard.
Je viens de rencontrer ce problème localement après avoir exécuté les mises à jour. On dirait que le problème fondamental est Drush ne sait pas où trouver une copie légitime de php incluant pdo. Heureusement, il prend en charge le stockage de ce chemin dans une variable d'environnement, je l'ai donc fait en ligne de commande:
export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"
Cela a résolu le problème, j'ai donc modifié .zshrc et ajouté cela au fichier, le problème est résolu.