Установка общесистемной переменной среды PATH в Mavericks

41

В предыдущих версиях ОС можно было установить общесистемную переменную среды PATH, /etc/launchd.confчтобы сделать ее доступной для всех приложений (не только для командной строки).

В Mavericks это, кажется, больше не используется.

Есть ли другой способ сделать это в Маверикс?

Том
источник

Ответы:

51

Yosemite

/etc/launchd.confбольше не поддерживается в 10.10. Смотрите man launchctl:

Файл /etc/launchd.conf больше не используется для подкоманд, запускаемых во время ранней загрузки; эта функциональность была удалена из соображений безопасности.

Теперь вы можете, например, сохранить этот лист как ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Команда launchctl setenvзапускается от имени пользователя, поэтому она применяется только к процессам, запущенным в пользовательском домене.

Этот метод не применяется к приложениям, которые открываются при входе в систему, если установлен флажок «Открывать окна при повторном входе в систему».

Маверикс и ранее

В версии 10.9 и более ранних, например, вы можете запустить

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

и затем перезапустите, чтобы применить изменения.

Другие методы

/etc/pathsи /etc/paths.d/применять только (или в основном) к оболочкам. Линии /etc/pathsи /etc/paths.d/*добавляются к пути с помощью path_helper , которая запускается из /etc/profile, /etc/zshenv, и /etc/csh.login. Я не знаю никаких программ, кроме оболочек, которые рассматривали бы /etc/pathsили /etc/paths.d/.

~/.MacOSX/environment.plist перестал работать в 10.8.

LRI
источник
2
Ага; он просто не существует по умолчанию, но его создание и установка правильных записей помогает
mgol
На Yosemite я обнаружил, что некоторые программы, похоже, не видят PYTHONPATH, который я установил в /etc/launchd.conf, и я использовал ваше исправление командной строки (2-й абзац в вашем ответе), и оно, похоже, не работает , это просто дает мне сообщение об ошибке launchctl / помощь.
Танго
@ Танго я отредактировал ответ. /etc/launchd.confбыл удален в 10.10.
Lri
Я добавлю, что мой опыт работы с bash заключается в том, что на 10.10 launchctl setenv, похоже, ничего не делает. Я попытался установить переменные env, затем проверил значение с помощью echo, и они все еще не определены.
Танго
1
@Tango Выйдите и снова откройте приложение терминала после запуска launchctl setenv. launchctl setenvникогда не влиял на существующие процессы.
Lri
11

Есть гораздо более простой способ. Поместите текстовый файл в папку /etc/paths.d/. В этом текстовом файле введите желаемый путь и символ новой строки. Лучший способ - создать новый файл для каждого пути.

В моей системе есть файл MySQL с текстом «/ usr / local / mysql / bin» и переводом строки.

CAryaSil
источник
Я только что опубликовал новый вопрос о том, существуют ли способы устранения слабости, описанной @LauriRanta.
kuzzooroo
Просто анакдот: я тоже использовал этот метод, так как это рекомендуемый способ OS X. У меня не было особой удачи, заставив Систему последовательно соблюдать файлы PATH, которые у меня есть в /etc/paths.d, и обычно заканчивали тем, что либо использовали команду оболочки экспорта, либо помещали мои PATH в ~ / .bash_profile, который всегда работает, если только для моей текущей учетной записи пользователя, а не для всей системы. Если файлы PATH в /etc/paths.d всегда работают для вас, то я ревную, что ваша Система ведет себя лучше, чем моя;)
chillin
Этот новый для меня. Ницца!
Кузен Кокаин
3

Вы можете установить переменные среды в файле /etc/launchd-user.conf...

В Mavericks мне удалось настроить переменную среды в файле с помощью строки:

setenv TEST test

После новой загрузки $TESTиз /etc/launchd-user.conf устанавливается.

редактировать

Возможно, синтаксис файла в /etc/launchd.conf недействителен. Можете ли вы опубликовать содержимое этого файла для проверки?

Из того, что я вижу, установка переменной PATH в /etc/launchd.conf работает нормально. Однако launchdне выполняет никаких расширений параметров . Поэтому, если у вас есть такая запись setenv PATH $PATH:/usr/local/bin, ваш результирующий путь будет установлен на « $PATH:/usr/local/bin» (примечание: не значение PATH, а текст «$ PATH»)

Эдди Келли
источник
Спасибо, у меня проблема с настройкой PATH, другие переменные окружения работают.
Том
@ Том - Я предоставил дополнительное предложение выше
Эдди Келли
1
действительно ли это так: launch-user.conf или launch- [current_user_name] .conf
Shanimal
Файл /etc/launchd.conf, содержащий 'ТЕСТ-тест setenv', не распространяется в Терминал на моих Mavericks.
Дэйв Икс
Упс: с / Маверикс / Йосемити /.
Дэйв Икс
0

в моей установке Mavericks, добавление «setenv PATH blablabla» в /etc/launchd.conf не работало после перезагрузки

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

Джордж Дима
источник
Это не сработало для меня. Я перезагрузился, /etc/pathsсодержит все , что я хочу, и все же Sublime по-прежнему видит только оригинальный путь. Если я запускаю его из терминала, он работает.
mgol
Команда path_helper в моем / etc / profile использует / etc / paths и /etc/paths.d, чтобы перезаписать любой PATH, который мог быть установлен /etc/launchd.conf
Дейв X
0

Я обнаружил, что setenv PATH по-прежнему работает для меня в терминале и приложениях, но не работает в сценариях оболочки, запускаемых непосредственно с помощью нажатия или «Открыть с помощью» в терминале, скажем, из Finder. Это очень странно Другие переменные среды, установленные в /etc/launchd.confработе.

Чтобы исправить это для сценариев оболочки, запускаемых напрямую, я продублировал настройку PATH в ~/.bash_profile.

DKroot
источник
0

Редактирование /etc/paths.dили использование .bash_profileне работало для меня, однако, как это было предложено кем-то другим (я действительно пришел сюда, чтобы выразить свое мнение, но я не смог найти его снова ?!), я отредактировал, /etc/pathsкоторый работает для меня

В моем случае я добавил android-tool adbи androidкоманды терминала с указанием их путей sdk (в adbнастоящее время перемещен в другой каталог), которые выглядят как

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
Longi
источник
0

SWEET, добавление этого XML в ~ / Library / LaunchAgents / setenv.SVN.plist позволило BBEdit использовать двоичные файлы Subversion, которые я установил в / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Марк М
источник
1
Любая идея, как определить, поддерживает ли этот файл расширение параметров? Возможно, я установил путь, поэтому единственный в / opt является единственным. И я думаю, что, скорее всего, он не поддерживает использование $ PATH. Как бы вы определили существующий путь для начала?
Марк М
-1

Просто добавьте путь 'bin' (путь, который вы хотите добавить) к файлу / etc / paths - перезагрузите компьютер или перезапустите !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

сохраните файл и перезапустите ... надеюсь, это поможет

code0110
источник