シェルとしてzsh
を使用しており、環境を構成しようとしています。
通常、ファイルを作成して$Java_HOME
変数を定義します。
/etc/profile.d/Java.sh
次の内容で
export Java_HOME=/path/to/jdk
export PATH=$Java_HOME/bin:$PATH
その後、ログアウトして再度ログインすると、すべて機能しますが、何らかの理由でPATH
変数が設定されていません。 Java_HOME
を認識しますが、新しいPATH
は認識しません。次の端末スニペットを参照してください。
~ 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
そして、私はjvmからコマンドを実行しようとすることでそれを確認しました
~ Java -version
zsh: command not found: Java
PATH
には$Java_HOME
は含まれません。他に確認する必要があるものはありますか?
私が実行した場合:
source /etc/profile.d/Java.sh
それはすべて正しく実行され、変数は必要に応じて設定されますが、/etc/profile.d
のスクリプトは自動的に実行されませんか?
私の観点から、最善の方法は~/.zshrc
ファイルに次の行を追加することです(まだ持っていない場合は作成します):
if [ -d "/path/to/jdk" ] ; then
export PATH="/path/to/jdk/bin:$PATH"
fi
次に、zsh
を再起動するか、単にsource ~/.zshrc
を実行してから、PATHを希望どおりに設定します。
または、システム全体に変更を加える場合は、/etc/zsh/zshenv
ファイルの最後に前のコードを追加します。
ただし、いずれにしても、zsh
でスクリプトを自動的に実行するために/etc/profile.d
を使用しないでください。このディレクトリは、bash
シェルに対してのみ有用であり、あなたの場合のようにzsh
では有用ではありません。これを理解するには、/etc/profile
ファイルを開きます。これは bash初期化ファイル であり、いずれの場合も zsh初期化ファイル 。ファイルの最後のどこかに表示されます。
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
したがって、/etc/profile.d
ディレクトリのスクリプトは、たとえば/etc/zsh/zprofile
などのzsh初期化ファイルに以前のコードを追加した場合、または/etc/profile
ファイルのソース/etc/zsh/zprofile
でのみ、zsh
で自動的に実行されます。
Java_HOME
が設定されているので、これらのスクリプトが自動的にソースされることを確認しましたよね?
唯一の論理的な説明は、PATH
が後で設定されるということです。 /etc/environment
を読み取るPAMによって最初に設定される必要があり、私が知る限り、/etc/profile.d/*.sh
ファイルがソースされる前に発生します。その点で、おそらくzshはbashと比較して動作が異なります。
アップデートを実行した後、ローカルでこの問題に遭遇しました。根本的な問題のように見えますが、Drushはpdoを含むphpの正当なコピーの場所を知りません。幸いなことに、このパスを環境変数に隠しておくことができるので、コマンドラインでこれを行いました。
export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"
これで問題が修正されたため、.zshrcを編集してファイルに追加し、問題を解決しました。