Де розмістити $ PATH змінні твердження в zsh?


110

Я люблю zsh, але я не впевнений, де розмістити свої $PATHта інші змінні твердження? Я вважаю, що вони розкидані між файлами .zshrc .zprofile .bashrc .bash_profile, а іноді і подвоюються.

Я розумію , що маючи нічого всередині bashфайлів не має великого сенсу , бачачи , як я використовую zsh, але де саме я повинен бути розміщуючи мої rvm, python, і nodeт.д. доповнення Мої $PATH?

Чи є конкретний файл, який я повинен використовувати (тобто .zshenvякий зараз не існує в моїй установці), один із тих, якими я зараз користуюся, чи це навіть має значення?

Відповіді:


148

tl; dr версія: використання ~/.zshrc

І прочитайте сторінку чоловіка, щоб зрозуміти відмінності між:

~/.zshrc, ~/.zshenvі ~/.zprofile.


Щодо мого коментаря

У своєму коментарі, що додається до відповіді, яку дав кев , я сказав:

Здається, це неправильно - / etc / profile не вказано в жодній документації zsh, яку я можу знайти.

Це виявляється частково невірно: /etc/profile може бути отримано zsh. Однак це відбувається лише в тому випадку, якщо zsh"викликається як shабо ksh"; в таких режимах сумісності:

Звичайні сценарії запуску / відключення zsh не виконуються. Джерело оболонки для входу в систему / etc / profile, а потім $ HOME / .profile. Якщо змінна середовище ENV встановлена ​​при виклику, $ ENV отримується після сценаріїв профілю. Значення ENV піддається розширенню параметрів, підстановці команд та арифметичному розширенню перед тим, як його інтерпретувати як ім'я шляху. [ man zshall, "Сумісність" ].

Посилання ArchWiki ZSH говорить:

Під час входу Zsh видає такі файли в такому порядку:
/ etc / profile
Цей файл отримує всі оболонки, сумісні з Bourne, після входу

Це implys , що /etc/profileце завжди читають по zshпри вході в систему - у мене немає ніякого досвіду роботи з проектом Arch Linux; Вікі може бути правильним для цього розповсюдження, але це, як правило, не правильно. Інформація є невірним по порівнянні з ЗШЕМ довідкових сторінок, і , здається, не застосовується до ЗШУ на OS X (шляху в $PATHнаборі в /etc/profileне зробити його мій ЗШ сесії).



Щоб вирішити питання:

де саме я повинен розміщувати свої додатки rvm, python, node тощо до мого $ PATH?

В загальному, я б Експортувати $PATHз ~/.zshrc, але це варто мати прочитаний в zshall сторінці людини, в Зокрема , розділ «ЗАПУСК / ЗУПИНКА ФАЙЛИ» - ~/.zshrcчитається для інтерактивної оболонок, які можуть або не можуть відповідати вашим потребам - якщо ви хочете, щоб $PATHдля кожна zshоболонка, на яку ви посилаєтесь ( interactiveі не, loginі не, і не і т. д.), тоді ~/.zshenvє кращим варіантом.

Чи є конкретний файл, який я повинен використовувати (тобто .zshenv, який наразі не існує в моїй установці), один із тих, якими я зараз користуюся, чи це навіть має значення?

Під час запуску читається купа файлів (перевірте пов’язані manсторінки), і в цьому є причина - кожен файл має своє місце (налаштування для кожного користувача, налаштування для користувача, налаштування оболонок для входу, налаштування для кожної оболонки, тощо).
Не турбуйтеся про те, що ~/.zshenvне існує - якщо вам це потрібно, зробіть це, і воно буде прочитане.

.bashrcі .bash_profileякі НЕ читають zsh, якщо ви явно не джерело їх ~/.zshrcабо аналогічний; синтаксис між bashі zshє НЕ завжди сумісні. Обидва .bashrcі .bash_profileрозроблені для bashналаштувань, а не zshналаштувань.


3
Дякуємо за вашу більш ніж грунтовну відповідь simont. Дивно , що ви говорите , .bashrcі .bash_profileне читаються , zshяк я в даний час у мене rvmдоповнення до $PATHв .bashrc, і моє pythonдодавання в .bash_profile, і обидва вони додаються тільки штрафом. У будь-якому випадку, я збираюся перемістити весь $PATHекспорт, ~/.zshrcоскільки zshтам розміщена вся моя інша конфігурація. Треба визнати, я не надто знайомий з різними типами снарядів. Читаючи посилання, які ви опублікували, я здогадуюсь, що використовую інтерактивну оболонку, але читаю далі, щоб бути впевненим ... Ще раз дякую!
stefmikhail

30

Ось документи зі сторінок zsh man у розділі 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

Більше інформації ви можете отримати тут .


18

У мене була подібна проблема (в команді терміналу bash працювала правильно, але zsh показала, що команда не знайшла помилку)

Рішення:


просто вставте те, що ви раніше вставляли в ~ / .bashrc, щоб:

~/.zshrc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.