Как я устанавливаю глобальную переменную среды PATH на OS X?


101

Я хотел бы добавить к глобальной переменной среды PATH в OS X, чтобы все пользовательские оболочки и приложения с графическим интерфейсом получали одинаковую среду PATH.

Я знаю, что могу добавить путь в сценарии запуска оболочки, но эти настройки не наследуются приложениями с графическим интерфейсом.

Единственный способ, который я нашел, - переопределить переменную среды 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: я обнаружил, что было достаточно выйти и перезапустить X11(менее болезненно, чем выйти из системы). Я не пробовал это Terminal.
Питер Глюк

Я имел в виду Терминал - вы правы, я забыл указать.
Вероника

8
Это хорошо знать, но это НЕ отвечает на вопрос ОП, поскольку этот механизм не применяется к приложениям с графическим интерфейсом. ОП искал унифицированное решение, позволяющее ему присоединиться к дефолту $PATH.
Маклемент

что вы подразумеваете под "моей системой" здесь, @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
Отличная находка, но вопрос уже говорит о launchd и спрашивает о том, как присоединиться к пути в нем.
Cregox

21
Вы действительно добавили комментарий к первоначальному вопросу, указывая на себя как на «настоящий ответ»?
TJ Luoma

7
Это подразумевается в вашем - полезном - ответе, но просто для разъяснения: желание ОП добавить путь по умолчанию не поддерживается, потому что вы не можете ссылаться на другие переменные среды в /etc/launchd.conf.
mklement

Это не глобально - среда командной строки игнорирует это, когда / etc / profile вызывает path_helper и перестраивает PATH из / etc / paths и /etc/paths.d/
Дэйв X

1
в соответствии с apple.stackexchange.com/questions/106355/… , это больше не работает для Йосемити или позже
Эрикн

7

Вы должны будете установить его на основе оболочки за оболочкой; Bash и csh-подобные оболочки не используют одни и те же файлы конфигурации и синтаксис для настройки PATH.

Попытка сделать это launchctlне будет работать, потому что переменные окружения устанавливаются при входе в систему; они не существуют в масштабе всей системы в Unix вне сеанса оболочки.

Итак, вы хотите добавить

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

к /etc/csh.cshrcи

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

к /etc/bashrc.

Если вам нужны переменные среды в приложениях с графическим интерфейсом, это более сложно. Вы должны создать .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 ... Хммм ... / я в замешательстве.
Ксеркс

В самом деле? Какую переменную среды вы там устанавливаете?
Палмер

1
Просто обновление с OS X 10.8: ~/.MacOSX/environment.plistподход больше не поддерживается, и на уровне пользователя нет замены. Вы можете использовать /etc/launchd.confвсю систему (и есть решение для каждого приложения).
Маклемент

Не отвечает на вопросы ОП.
Кевин

3

Вы можете редактировать свой глобальный путь, добавляя строки по /etc/pathsодному пути на строку.

sudo nano /etc/paths должен доставить тебя туда.


2
Это полезно знать, но это не отвечает на вопрос ОП, поскольку этот механизм не применяется к приложениям с графическим интерфейсом.
Маклемент


1

Я не уверен, что кто-нибудь освещал самый простой и элегантный способ. По крайней мере, в Mac OS X v10.6 (Snow Leopard).

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

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

    /usr/X11/bin
    /Developer/usr/bin
    
  • Затем добавьте

    eval '/usr/libexec/path_helper -s`
    

    на profileили bashrc, и вы должны быть хорошими, чтобы идти.


1
Это полезно знать, но это не отвечает на вопрос ОП, поскольку этот механизм не применяется к приложениям с графическим интерфейсом.
Маклемент

Имя файла буквально *name*? Или ты имеешь ввиду просто name?
Питер Мортенсен

0

Я не уверен, что launchd принимает это, но попробуйте:

setenv PATH "$ PATH: / my / path"

1
К сожалению, это не работает. Не похоже, что launchctl имеет простой доступ к переменным окружения. Есть команда для получения переменных окружения, но нет абсолютно никакой документации о том, как ее использовать.
Лайос

0

Я не уверен, почему вы используете, /etc/launchd.confа не /etc/profile- но я не эксперт в Mac OS X - я верю вам в то, что я уверен, что это работает, но launchdреализация / замена Mac OS X для init- Mac OS Х смущает меня.

Во всяком случае, setenv PATH "$PATH:/more/paths:/and/more/paths"будет работать (tcsh), и эквивалент оболочки Bourn export PATH="$PATH:/more/paths:/and/more/paths"- я понятия не имею, как launchdэто связано с конкретной оболочкой.

Я думаю, что задал больше вопросов, чем ответил =)


4
Параметры пути / etc / profile не видны ни в одном из приложений OS X GUI. Это относится только к Bash. Я хочу, чтобы все приложения получили новую настройку пути.
Лайос

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