Когда я использую ZSH, как мне установить PATH в /etc/profile.d?

Я использую 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
задан 4 June 2014 в 02:15

4 ответа

С моей точки зрения лучший способ состоит в том, чтобы добавить следующие строки в ~/.zshrc файл (если у Вас уже нет его, затем создайте его):

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

Затем перезапустите Ваш zsh, или просто выполненный source ~/.zshrc и затем Ваш ПУТЬ должен быть точно, как Вы желаете.

Или, если Вы хотите внести изменение, чтобы быть в масштабе всей системы, затем добавьте предыдущий код в конец /etc/zsh/zshenv файл.

Но в любом случае не используйте /etc/profile.d автоматически запускать скрипты в zsh. Этот каталог полезен только для bash оболочка, нет zsh как в Вашем случае. Понять это, открытое /etc/profile файл, который является файлом инициализации удара и ни в коем случае 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 каталог будет автоматически работать в zsh только если Вы добавляете предыдущий код в zsh файле инициализации, как /etc/zsh/zprofile например, или источник /etc/profile в /etc/zsh/zprofile файл.

27
ответ дан 4 June 2014 в 02:15

Просто столкнулся с этой проблемой локально после выполнения обновлений. Похож на основную проблему, Drush, не знает, где найти законную копию php, который включает pdo. К счастью, это поддерживает прятание этого пути в переменной среды, таким образом, я сделал это на командной строке:

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

, Который устранил проблему, таким образом, я отредактировал .zshrc и добавил это к файлу, решенная проблема.

0
ответ дан 4 June 2014 в 02:15

С тех пор JAVA_HOME установлен, Вы подтвердили, что те сценарии получены автоматически, не так ли?

единственное логическое объяснение состоит в том, что PATH установлен позже так или иначе. Это должно быть первоначально установлено PAM, который читает /etc/environment, и насколько я знаю, что это происходит, прежде /etc/profile.d/*.sh файлы получены. Возможно zsh работает отличающийся сравненный с ударом в этом отношении.

1
ответ дан 4 June 2014 в 02:15

Я нахожу, что размещение всего в одном .zshenv файл быстро становится трудным справиться. Я рекомендую установить oh-my-sh и затем поместить различные настройки (огибающий Вар, функции) к .oh-my-sh/custom/ каталог как отдельные .zsh файлы.

я также обнаружил, что этот подход работает безупречно когда ssh'ing в машину при изменении огибающих переменных такой как PATH. Также это работает действительно хорошее вместе с vcsh для хранения сохраненных настроек и в синхронизации.

3
ответ дан 4 June 2014 в 02:15

Другие вопросы по тегам:

Похожие вопросы: