Я использую 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
и затем Ваш ПУТЬ должен быть точно, как Вы желаете.
Или, если Вы хотите внести изменение, чтобы быть в масштабе всей системы, затем добавьте предыдущий код в конец /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
файл.
Просто столкнулся с этой проблемой локально после выполнения обновлений. Похож на основную проблему, Drush, не знает, где найти законную копию php, который включает pdo. К счастью, это поддерживает прятание этого пути в переменной среды, таким образом, я сделал это на командной строке:
export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"
, Который устранил проблему, таким образом, я отредактировал .zshrc и добавил это к файлу, решенная проблема.
С тех пор JAVA_HOME
установлен, Вы подтвердили, что те сценарии получены автоматически, не так ли?
единственное логическое объяснение состоит в том, что PATH
установлен позже так или иначе. Это должно быть первоначально установлено PAM, который читает /etc/environment
, и насколько я знаю, что это происходит, прежде /etc/profile.d/*.sh
файлы получены. Возможно zsh работает отличающийся сравненный с ударом в этом отношении.
Я нахожу, что размещение всего в одном .zshenv
файл быстро становится трудным справиться. Я рекомендую установить oh-my-sh и затем поместить различные настройки (огибающий Вар, функции) к .oh-my-sh/custom/
каталог как отдельные .zsh
файлы.
я также обнаружил, что этот подход работает безупречно когда ssh'ing в машину при изменении огибающих переменных такой как PATH
. Также это работает действительно хорошее вместе с vcsh для хранения сохраненных настроек и в синхронизации.