конфиг zsh - экспортировать или не экспортировать?

19

При установке переменных в моем ~/.zshrc Я могу либо использовать export

export PATH=/some/path

или нет

PATH=/some/path

Чем они отличаются и какие мне следует использовать?

jordelver
источник
Переменные среды, которые также используются неинтерактивными оболочками (скажем, сценарий оболочки, который вы написали), должны входить в .zshenv,
Francisco
Является ~/.zshenv также получены из логинов? Должен PATH определиться там?
jordelver
1
PATH это, вероятно, лучший пример переменной, которая должна быть определена внутри ~/.zshenvэтот файл получен любой сеанс Zsh (если вы не используете какую-либо опцию, чтобы отключить это). Увидеть man zsh для просмотра, какие файлы получены и в каком порядке.
Francisco
Хорошо, спасибо @Francisco. Я прочитаю страницу руководства.
jordelver

Ответы:

20

Если вы хотите, чтобы программы запускались из zsh для просмотра var, экспортируйте его.
Для пути, вы, вероятно, хотите экспортировать.
Вместо export PATH=/some/path ты наверное хочешь export PATH="$PATH:/some/path", если только вы не собираетесь полностью очистить путь предустановки системы.

demure
источник
Это здорово, спасибо. Тогда я буду использовать экспорт как общее правило.
jordelver
19

Демуре уже ответил на ваш конкретный вопрос. Однако это zsh вопрос и о PATH, Итак, вот еще один момент: помимо стандартной переменной $PATH, существует также $path, который является массивом. Здесь вы видите разницу (двоеточия или нет ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Оба варианта автоматически синхронизируются. Итак, в чем преимущество использования массива?

  • Последний вы можете объявить через typeset -U path «сохранить только первое вхождение каждого дублированного значения» (из man zshbuiltins ). Это означает, что ваш путь остается чистым, даже если вы успешно ~/.zshrc (потому что вы изменили его или что-то еще) и не загромождайте его одними и теми же значениями снова и снова.
  • Ты можешь использовать path+=(/new/path) добавить новый каталог в ваш путь. Чтобы удалить элемент, вы должны использовать некоторые приемы, см., Например, https://stackoverflow.com/q/3435355/2037712 или же http://www.zsh.org/mla/users//2005/msg01132.html
  • Вы можете легко зациклить элементы в ПУТИ через for i ($path) { print $i # or do something else }

Наконец, вот выдержка из моего конфига:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH
mpy
источник
Спасибо, это был на самом деле дополнительный вопрос. Я буду смотреть на управление моим путем, используя path скорее, чем PATH,
jordelver
1
Рад слышать, так как я уже боялся, что я ОТ. Btw. Еще одно преимущество, которое я забыл: вы можете легко зациклить элементы с for i ($path) { print $i # or do something else },
mpy