Где разместить переменные $PATH в zsh?

Мне нравится zsh, но я не уверен, где разместить мои утверждения $PATH и другие переменные? Я обнаружил, что они разбросаны между файлами .zshrc .zprofile .bashrc .bash_profile, а иногда и удваиваются.

Я понимаю, что иметь что-либо внутри файлов bash не имеет большого смысла, поскольку я использую zsh, но , где именно я должен помещать свои rvm, python, node и т.д. к моему $PATH?

Существует ли конкретный файл, который я должен использовать (т.е. .zshenv, который в настоящее время не существует в моей установке), один из тех, которые я использую в настоящее время, или это даже имеет значение?

Ответ 1

tl; dr версия: используйте ~/.zshrc

И прочитать справочную страницу, чтобы понять различия между ними:

~/.zshrc, ~/.zshenv и ~/.zprofile.


Что касается моего комментария

В своем комментарии к ответу kev дал, я сказал:

Это кажется неправильным -/etc/profile не указан в любой документации zsh, которую я могу найти.

Это оказывается частично неправильным: /etc/profile может быть получен с помощью zsh. Однако, это происходит только в том случае, если zsh "вызывается как sh или ksh"; в этих режимах совместимости:

Обычные сценарии запуска/выключения zsh не выполняются. Введите исходный код оболочки /etc/profile, за которым следует $HOME/.profile. Если переменная окружения ENV задана при вызове, $ENV получается после скриптов профиля. Значение ENV подвергается расширению параметров, подстановке команд и арифметическому расширению, прежде чем интерпретироваться как путь. [man zshall, "Совместимость" ].

Ссылка ArcWiki ZSH говорит:

При входе в систему Zsh отправляет следующие файлы в следующем порядке:
/И т.д./профиль | Этот файл создается всеми совместимыми с Bourne оболочками при входе в систему

Это означает, что /etc/profile всегда читается zsh при входе в систему - у меня нет опыта работы с проектом Arch Linux; вики могут быть правильными для этого дистрибутива, но это, как правило, неверно. Информация неверна по сравнению с страницами руководства zsh и, похоже, не относится к zsh на OS X (пути в $PATH, установленные в /etc/profile, не попадают на мои zsh-сессии),



Чтобы задать вопрос:

где именно я должен размещать мои rvm, python, node и т.д. дополнения к моему $PATH?

Как правило, я экспортировал бы мой $PATH из ~/.zshrc, но стоит прочитать zshall man page, в частности, раздел "STARTUP/SHUTDOWN FILES" - ~/.zshrc читается для интерактивных оболочек, которые могут или не подходят вашим потребностям - если вы хотите $PATH для каждого вызванного вами оболочки zsh (оба interactive а не, как login, так и нет, и т.д.), тогда ~/.zshenv является лучшим вариантом.

Существует ли конкретный файл, который я должен использовать (например,.zshenv, который в настоящее время не существует в моей установке), один из тех, которые я сейчас использую, или это даже имеет значение?

Там есть куча файлов, прочитанных при запуске (проверьте связанные страницы man), и есть причина для этого: каждый файл имеет свое особое место (настройки для каждого пользователя, настройки для пользовательских настроек для систем входа в систему, настройки для каждой оболочки и т.д.).
Не беспокойтесь о ~/.zshenv not existing - если вам это нужно, сделайте это, и он будет прочитан.

.bashrc и .bash_profile считаются не, прочитанными zsh, если вы явно не используете их из ~/.zshrc или подобных; синтаксис между bash и zsh не всегда совместим. Оба .bashrc и .bash_profile предназначены для настроек bash, а не для zsh.

Ответ 2

Вот документы с страниц руководства zsh в разделе STARTUP/SHUTDOWN FILES.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Из этого можно видеть, что файлы порядка читаются:

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

Вы можете получить дополнительную информацию здесь.

Ответ 3

У меня была аналогичная проблема (в bash команда терминала работала правильно, но zsh показала команду не найденную ошибку)

Решение:


просто вставьте все, что вы ранее вставляете в ~/.bashrc, чтобы:

~/.zshrc