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


22

私は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自動的に実行されるべきではありませんか?


~/.profile代わりに変数を編集して配置しようとしましたか?のPATHどこかで上書きされている可能性があります/etc/profile.d/
saiarcot895 14年

回答:


27

私の観点から、~/.zshrcファイルに次の行を追加するのが最善の方法です(まだ持っていない場合は作成します):

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

次に、を再起動するzshか、単に実行source ~/.zshrcしてから、PATHが希望どおりになります。

または、システム全体に変更を加える場合は、/etc/zsh/zshenvファイルの最後に以前のコードを追加します。

ただし、いずれにしても、で/etc/profile.dスクリプトを自動的に実行するために使用しないでくださいzsh。このディレクトリは、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ディレクトリからのスクリプトは、たとえば、ファイル内のソースなど、zshzsh初期化ファイルに以前のコードを追加した場合にのみ自動的に実行されます。/etc/zsh/zprofile/etc/profile/etc/zsh/zprofile


4
たぶん~/.zprofile、より良いかもしれません~/.zshrc
ムル

3

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

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


私のzshフレームワークを使用して、sshアクセスに使用するipアドレス(リモートサーバー)を持つ変数をどこに配置しますか?gitのIPとサーバーへのログインスクリプトが必要です。
ティモ

1
ふむ 意味がよくわかりません。私はsshのIPアドレスとユーザー名のような設定を~/.ssh/config
–dvim

私は個人的に、vcshを使用する利点が好きであり、ZSHの「カスタム」フォルダがこのようなものの理想的な場所であるため、受け入れられた答えよりもこのアプローチを好みます。
エリックブラウン

1

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

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


0

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

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

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


1
だから、あなたはそれ.zshrcを使用することを提案しています、トップの答えと同じですか?
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.