it-swarm-ru.tech

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

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

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

Единственный способ, который я нашел, - это переопределить переменную среды PATH в / etc/launchd.conf:

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

Я не мог найти способ действительно добавить к PATH в launchd.conf.

Я немного обеспокоен этим методом, но пока это единственное, что работает. Есть ли способ лучше?

102
lajos

информация о графическом интерфейсе пользователя Palmer верна, но есть более удобный способ изменить путь, который видит Shell. Как Medaslave сказал , вы можете редактировать /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
72
cogg

/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.

48
sorin

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

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

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

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 .

7
palmer

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

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

3
manumoomoo

Вы смотрели на справочную страницу для path_helper утилита командной строки в OS X? Я ответил на в некоторой степени связанный с этим вопрос о SO , который, я думаю, вам может пригодиться.

1
ayaz

Я не уверен, что кто-то описал самый простой и самый элегантный способ. По крайней мере, на 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
noboomu

Я не уверен, почему вы используете /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 Shell будет export PATH="$PATH:/more/paths:/and/more/paths" - Я понятия не имею, как launchd связано с определенной оболочкой.

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

0
Xerxes

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

setenv PATH "$ PATH:/my/path"
0
user1686