Как я устанавливаю глобальную переменную среды PATH на OS X?
Я хотел бы добавить к глобальной переменной среды PATH в OS X, чтобы все пользовательские оболочки и приложения с графическим интерфейсом получали одинаковую среду PATH.
Я знаю, что могу добавить путь в сценарии запуска оболочки, но эти настройки не наследуются приложениями с графическим интерфейсом.
Единственный способ, который я нашел, - переопределить переменную среды PATH в /etc/launchd.conf:
setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path
Я не мог придумать, как на самом деле присоединиться к PATH в launchd.conf
,
Я немного обеспокоен этим методом, но пока это единственное, что работает. Есть ли способ лучше?
8 ответов
Информация о графическом интерфейсе 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
/etc/launchd.conf
launchd.conf
** это единственное законченное решение, которое будет работать как для командной строки, так и для приложений с графическим интерфейсом в OS X v10.8 (Mountain Lion) и v10.9 (Mavericks), которое будет работать с GUI и консольными приложениями для всех пользователей.
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.
Вы должны будете установить его на основе оболочки за оболочкой; 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/paths
по одному пути на строку.
sudo nano /etc/paths
должен доставить тебя туда.
Я не уверен, что кто-нибудь освещал самый простой и элегантный способ. По крайней мере, в 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
и тебе надо идти.
Вы смотрели на справочную страницу для path_helper
утилита командной строки на OS X? Я ответил на несколько связанный вопрос о SO, который, я думаю, может оказаться полезным.
Я не уверен, что launchd принимает это, но попробуйте:
setenv PATH "$ PATH: / my / path"
Я не уверен, почему вы используете /etc/launchd.conf
в отличие от /etc/profile
- но я не эксперт в Mac OS X - я верю вам в это, я уверен, что это работает, но launchd
это реализация / замена Mac OS X для init
- Mac OS X смущает меня.
Тем не мение, setenv PATH "$PATH:/more/paths:/and/more/paths"
будет работать (tcsh), и эквивалент оболочки Bourn export PATH="$PATH:/more/paths:/and/more/paths"
- Я понятия не имею, как launchd
связан с конкретной оболочкой либо.
Я думаю, что задал больше вопросов, чем ответил =)