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

Я использую zsh как моя оболочка, и я пытаюсь настроить свою среду.

Я обычно определяю свою $JAVA_HOME переменную путем создания файла:

/etc/profile.d/java.sh

со следующим содержанием

export JAVA_HOME=/path/to/jdkexport 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 -versionzsh: 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 файл, который представляет собой удар файл инициализации и ни в коем случае не зш файл инициализации, и вы увидите где - то в конце файла:

if [ -d /etc/profile.d ]; then  for i in /etc/profile.d/*.sh; do    if [ -r $i ]; then      . $i    fi  done  unset ifi

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

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

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

С JAVA_HOME установлен, вы подтвердили, что эти скрипты загружаются автоматически, не так ли?

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

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

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

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

Вы пробовали редактировать ~/.profile и вместо этого помещать туда переменные? Возможно, PATH перезаписывается в другом месте в /etc/profile.d/.