Як встановити глобальну змінну середовища PATH на OS X?


101

Я хотів би додати глобальну змінну середовища PATH на OS X, щоб усі оболонки користувачів та програми GUI отримували однакове середовище PATH.

Я знаю, що можу додати шлях до сценаріїв запуску оболонки, але ці настройки не успадковуються програмами GUI.

Єдиний спосіб, який я знайшов поки що, - переосмислити змінну середовища PATH у /etc/launchd.conf :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Я не міг з'ясувати спосіб насправді приєднатись до PATH launchd.conf.

Я трохи переживаю за цей метод, але поки це єдине, що працює. Чи є кращий спосіб?



2
Для Yosemite і пізніше, див stackoverflow.com/questions/25385934 / ...
thSoft

Жодна з відповідей тут не стосується питання ОП. Але коментар тут від ThSoft прямо на гроші! Можливо, це слід об'єднати або пов’язати з цим посиланням на запитання: stackoverflow.com/questions/25385934/…
Кевін Букс

Відповіді:


71

Інформація про графічний інтерфейс Palmer правильна, але існує більш доцільний спосіб змінити шлях, показаний оболонкою. Як сказав mediaslave , ви можете редагувати /etc/paths, але ще краще ви можете залишити текстовий файл, у /etc/paths.d/якому є шлях, і всі оболонки будуть правильно побудувати шлях.

Наприклад, у моїй системі:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
Приємно, дякую! Примітка. Для цього потрібно вийти та увійти в систему, перш ніж вона працює.
weronika

@weronika: Я вважав, що це достатньо, щоб вийти та перезапустити X11(менш болісно, ​​ніж повністю вийти з системи). Я не пробував Terminal.
Пітер Глюк

Я мав на увазі Термінал - ви праві, я забув вказати.
weronika

8
Це добре знати, але воно НЕ відповідає на питання ОП в тому, що цей механізм не стосується програм GUI. ОП шукала уніфікованого рішення, яке дозволяє йому додати дефолт $PATH.
mklement

що ти маєш на увазі під моєю системою @cogg? Хіба ми не всі тут використовуємо OS X? Вибачте, але я все ще нова в OS X. Я використовую OS X 10.7
ericn

48

/etc/launchd.conf

launchd.confФайл ** єдине повне рішення , яке буде працювати як для командного рядка і програми з графічним інтерфейсом на OS X v10.8 (Mountain Lion) і v10.9 (Mavericks), той , який буде працювати з графічним інтерфейсом і консольними додатками для всіх користувачів .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Додайте

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

У наведеному вище прикладі я додав /usr/local/binзначення PATH для середовища за замовчуванням.

Майте на увазі, що цей файл не є сценарієм і у вас немає можливості використовувати підстановки. Також для їх застосування потрібно перезавантажити.

Пам'ятайте, що всі інші - лише часткові рішення:

  • environment.plist не працює для програм, запущених через Spotlight.
  • /etc/paths - тільки для консолі
  • /etc/csh.cshrcабо /etc/bashrc- лише для деяких снарядів

Ця відповідь заснований на тому ж питання Установка змінних оточення на Mac OS X .


7
Чудова знахідка, але питання вже говорить про запуск і задає питання про те, як додати шлях до нього.
Крегокс

21
Ви дійсно додали коментар до початкового питання, вказуючи на себе як на "справжню відповідь"?
TJ Luoma

7
Це має на увазі Ваша - корисна відповідь, але просто для того, щоб її прописати: бажання ОП додати до шляху за замовчуванням не підтримується, тому що Ви не можете посилатися на інші змінні середовища /etc/launchd.conf.
mklement

Це не глобально - середовище командного рядка відкине це, коли / etc / profile викликає path_helper та відновлює PATH з / etc / paths та /etc/paths.d/
Dave X

1
За повідомленням apple.stackexchange.com/questions/106355/… , це вже давно не працює для Йосеміті чи пізніших
ericn

7

Вам доведеться встановлювати це на основі оболонки; Bash і csh-подібні оболонки не мають однакових файлів конфігурації та синтаксису для налаштування PATH.

Спроба зробити це launchctlне вийде, оскільки змінні середовища встановлені під час входу; вони не існують системи в Unix поза сеансом оболонки.

Тож ви хочете додати

setenv PATH "$PATH:/add/my/extra/path"

до /etc/csh.cshrcта

export PATH="$PATH:/more/paths:/

до /etc/bashrc.

Якщо ви хочете, щоб змінні середовища в додатках GUI, це складніше. Ви повинні створити .MacOSX/environment.plistфайл у домашньому каталозі кожного користувача. .MacOSXКаталог, швидше за все , не існує за замовчуванням, так що вам доведеться створити його.

Формат файлу такий:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Детальніше про environment.plist це на сайті Apple .


Але налаштування набувають чинності, коли встановлені в /etc/launchd.conf ... Хммм ... / мене плутають.
Xerxes

Дійсно? Яку змінну середовища ви встановлюєте там?
палмер

1
Просто оновлення на ОС X 10.8: ~/.MacOSX/environment.plistпідхід більше не підтримується і на рівні користувача немає заміни. Ви можете використовувати загальносистемну систему /etc/launchd.conf(і є рішення для додатків *.).
mklement

Не відповідає на питання ОП.
Кевін Букс

3

Ви можете редагувати свій глобальний шлях, додаючи рядки до /etc/pathsодного шляху на рядок.

sudo nano /etc/paths мусить вас туди завести.


2
Це добре знати, але це не відповідає на питання ОП в тому, що цей механізм не стосується програм GUI.
mklement


1

Я не впевнений, чи хтось охопив найпростіший та найелегантніший спосіб. Принаймні, на Mac OS X v10.6 (Snow Leopard).

Мессінг з [/etc/|~/.]з [profile|bashrc]файлів може працювати, але це кілька рубати. /etc/paths.d/Каталог шлях:

  • Судо улюблений редактор.
  • Створіть новий файл з назвою *name*(просто не називайте його тим, що вже є) /etc/paths.d/із шляхом в рядку:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Потім додайте

    eval '/usr/libexec/path_helper -s`
    

    до profileабо bashrc, і вам слід добре піти.


1
Це добре знати, але це не відповідає на питання ОП в тому, що цей механізм не стосується програм GUI.
mklement

Чи ім'я файлу буквально *name*? Або ти маєш на увазі просто name?
Пітер Мортенсен

0

Я не впевнений, що поновлення цього приймає, але спробуйте:

setenv PATH "$ PATH: / мій / шлях"

1
На жаль, це не працює. Схоже, що startctl не має легкого доступу до змінних середовища. Існує команда отримати змінні середовища, але абсолютно немає документації щодо її використання.
lajos

0

Я не впевнений, чому б ви використовували, /etc/launchd.confа не /etc/profile- але я не знаю Mac OS X - я вірю вам, що я впевнений, що він працює, але launchdце реалізація / заміна Mac OS X для initMac OS X мене бентежить.

У будь-якому випадку, setenv PATH "$PATH:/more/paths:/and/more/paths"буде працювати (tcsh), а еквівалент обрізаної оболонки export PATH="$PATH:/more/paths:/and/more/paths"- я навіть не знаю, як launchdпов’язаний з певною оболонкою.

Я думаю, що я задав більше запитань, тоді я відповів =)


4
/ etc / налаштування шляху профілю не відображається жодним із додатків графічного інтерфейсу OS X. Це стосується лише bash. Я хочу, щоб усі програми отримали нове налаштування шляху.
lajos

1
Unix? Звичайно, це Unix. Я маю на увазі, сорта. Так, ми зламали речі, які працювали 30 років, але це все ще Unix! / зітхання
Метт Сіммонс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.