zsh config - експортувати чи не експортувати?


23

При встановленні змінних в моєму ~/.zshrcя можу або використовуватиexport

export PATH=/some/path

чи ні

PATH=/some/path

Як вони відрізняються і що я повинен використовувати?


Екологічні змінні, які також використовуються неінтерактивними оболонками (скажімо, сценарій оболонки, який ви написали), повинні входити .zshenv.
Франциско

Є чи ~/.zshenvотримані з допомогою оболонок входу в систему , а? Чи PATHслід там визначатись?
jordelver

1
PATHце, мабуть, найкращий приклад змінної, яку слід визначити всередині ~/.zshenv, цей файл отримується за допомогою будь-якого сеансу zsh (якщо ви не використовуєте якусь опцію для його вимкнення). Дивіться man zshогляд, які файли отримуються та в якому порядку.
Франциско

Добре, дякую @Francisco Я прочитаю сторінку чоловіка.
jordelver

Відповіді:


21

Якщо ви хочете, щоб програми запущені з zsh, щоб побачити var, експортуйте його.
Для шляху ви, ймовірно, хочете експортувати.
Замість цього export PATH=/some/pathви, мабуть, хочете export PATH="$PATH:/some/path", якщо ви не збираєтесь повністю очистити попередньо заданий шлях до системи.


Це чудово, дякую. Я зараз використовуватиму експорт як загальне правило.
jordelver

21

Demure вже відповів на ваше конкретне запитання. Однак це 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)для додавання нового каталогу у свій PATH. Щоб видалити елемент, потрібно скористатися деякими хитрощами, див., Наприклад, /programming//q/3435355/2037712 або http://www.zsh.org/mla/users//2005/msg01132.html
  • Ви можете легко перебирати елементи в PATH через for i ($path) { print $i # or do something else }

Нарешті, ось уривок з моєї конфігурації:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

Дякую, це було насправді подальшим питанням. Я буду розглядати управління своїм шляхом, використовуючи, pathа не PATH.
jordelver

1
Радий почути, як я вже побоювався, що я старий. Btw. Ще одна перевага, яку я забув: Ви можете легко перебирати елементи за допомогою for i ($path) { print $i # or do something else }.
mpy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.