Как настроить переменные среды в Mac OS X так, чтобы они были доступны для приложений с графическим интерфейсом без использования ~ / .MacOSX / environment.plist или же Крючки для входа (так как это осуждается )?
macos
environment-variables
launchd
launchctl
Percival Ulysses
источник
источник
Ответы:
На горе льва
/etc/paths
а также/etc/launchd.conf
редактирование не имеет никакого эффекта!Форумы разработчиков Apple говорят:
Так что я непосредственно отредактировал приложение
Info.plist
(щелкните правой кнопкой мыши «AppName.app» (в данном случае SourceTree) и затем «Show package contents
«)и добавил новую пару ключ / dict под названием:
(увидеть: Документация по LaunchServicesKeys в Apple )
теперь приложение (в моем случае SourceTree) использует указанный путь и работает с git 1.9.3 :-)
PS: Конечно, вы должны настроить запись пути в соответствии с вашими потребностями.
источник
Info.plist
вступить в силу.Решение использует функциональность
launchctl
в сочетании с Агент запуска имитировать учетные записи старых. Для других решений, использующих магазинlaunchd
, увидеть это сравнение , Используемый здесь агент запуска находится в / Library / LaunchAgents / :Одна важная вещь RunAtLoad ключ, чтобы запустить агент запуска в кратчайшие сроки. Настоящая работа выполняется в скрипте оболочки /Users/Shared/conflaunchd.sh , который читает ~ / .Conf.launchd и кормит это
launchctl
:Обратите внимание на зов
path_helper
получить ДОРОЖКА настроить правильно. В заключение, ~ / .Conf.launchd выглядит такЭто
launchctl
Команды, см. его man-страницу для получения дополнительной информации. У меня отлично работает (я должен отметить, что я все еще парень из Snow Leopard), такие приложения с графическим интерфейсом, как texstudio а также TeXShop можно увидеть мое собственное текстовое дерево. Вещи, которые можно улучшить:Сценарий оболочки имеет
#filename="$1"
в этом. Это не случайно, так как агент запуска должен указать имя файла в сценарии в качестве аргумента, но это не работает.Как уже упоминалось Вот (Немецкий и за платным экраном!), Сценарий можно поместить в агент запуска самостоятельно.
Я не уверен, насколько безопасно это решение, так как оно использует
eval
с предоставленными пользователем строками.Я думаю, что нужно помнить, что определение MANPATH с использованием этого метода не сработало, но я не уверен.
Следует отметить, что Apple намеревалась сделать несколько похожий подход, ~ / Launchd.conf , но в настоящее время не поддерживается в отношении этой даты и ОС (см. страницу руководства
launchd.conf
). Я полагаю, что такие вещи, как глобализация, не будут работать так, как в этом предложении. И, конечно, эти файлы можно разместить где угодно, кроме агента запуска, который должен находиться в / Library / LaunchAgents / или же ~ / Library / LaunchAgents / ,Наконец, я должен упомянуть источники, которые я использовал в качестве информации об Launch Agents: 1 , 2 , 3 , 4 ,
Обновить : Это не работает в версии 10.8 на данный момент. Обходные пути для каждого приложения описаны Вот а также Вот ,
источник
export PATH=.:"$(launchctl getenv PATH)"
в ~ / .bash_profile (аналогично для других оболочек). Это возможно сpath_helper
вызывается в сценарии оболочки. Для получения дополнительной информации о переменной PATH в OS X, проверьте этот ответ ,Ответ, предоставленный @ percival-ulysses, работает для меня на 10.9 Mavericks со следующим небольшим изменением: edit /Users/Shared/conflaunchd.sh сценарий прямо перед
exit 0
и добавьте строкиперезапустить док и менубар. После этого приложения, запущенные из Dock или из Spotlight, будут наследовать правильный PATH. Если вы используете Finder для запуска критически важных приложений, то
killall Finder
может быть добавлено тоже.в
.bash_profile
Я использую линиючтобы установить ПУТЬ для терминала, таким образом, ПУТЬ управляется из того же места, ~ / .Conf.launchd файл.
источник
Ответ, предоставленный @flori, работает для меня на Maverick при условии, что я запустил следующие команды в Терминале после изменения файла plist
источник
Другой вариант заключается в использовании
/etc/launchd.conf
, Например я изменил по умолчаниюPATH
добавив эту строку в/etc/launchd.conf
:Вы можете применить изменения к
/etc/launchd.conf
либо перезапустив, либо запустивlaunchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
и прекращение и возобновление процессов.Настройки в
/etc/launchd.conf
применяется как к процессу запуска root, так и к процессам запуска на уровне пользователя. Переменные среды, установленные сsetenv
в/etc/launchd.conf
показаны обаsudo launchctl export
а такжеlaunchctl export
,источник