web-dev-qa-db-ja.com

ZSHを使用する場合、/ etc / profile.dでPATHを設定するにはどうすればよいですか?

シェルとして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のスクリプトは自動的に実行されませんか?

22
Rodrigo Sasaki

私の観点から、最善の方法は~/.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で自動的に実行されます。

24
Radu Rădeanu

1つの.zshenvファイルにすべてを配置すると、すぐに管理が難しくなります。 oh-my-sh をインストールしてから、さまざまなカスタマイズ(env変数、関数)を.oh-my-sh/custom/ディレクトリに個別の.zshファイルとして配置することをお勧めします。

また、PATHなどのenv変数を変更するときにマシンにsshするときに、このアプローチが問題なく機能することも発見しました。また、カスタマイズのバックアップと同期を維持するために、 vcsh と一緒にすてきに動作します。

2
dvim

Java_HOMEが設定されているので、これらのスクリプトが自動的にソースされることを確認しましたよね?

唯一の論理的な説明は、PATHが後で設定されるということです。 /etc/environmentを読み取るPAMによって最初に設定される必要があり、私が知る限り、/etc/profile.d/*.shファイルがソースされる前に発生します。その点で、おそらくzshはbashと比較して動作が異なります。

1

アップデートを実行した後、ローカルでこの問題に遭遇しました。根本的な問題のように見えますが、Drushはpdoを含むphpの正当なコピーの場所を知りません。幸いなことに、このパスを環境変数に隠しておくことができるので、コマンドラインでこれを行いました。

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

これで問題が修正されたため、.zshrcを編集してファイルに追加し、問題を解決しました。

0
Allen Freeman