Как настроить переменные среды в Mac OS X так, чтобы они были доступны для приложений с графическим интерфейсом без использования ~ / .MacOSX / environment.plist или же Крючки для входа (так как это осуждается )?
Как настроить переменные среды в Mac OS X так, чтобы они были доступны для приложений с графическим интерфейсом без использования ~ / .MacOSX / environment.plist или же Крючки для входа (так как это осуждается )?
Ответы:
На горе льва /etc/paths
а также /etc/launchd.conf
редактирование не имеет никакого эффекта!
Форумы разработчиков Apple говорят:
"Изменить Info.plist самого .app, чтобы он содержал" LSEnvironment " словарь с переменными среды вы хотите.
~ / .MacOSX / environment.plist больше не поддерживается. "
Так что я непосредственно отредактировал приложение Info.plist
(щелкните правой кнопкой мыши «AppName.app» (в данном случае SourceTree) и затем « Show package contents
«)
и добавил новую пару ключ / dict под названием:
<key>LSEnvironment</key>
<dict>
<key>PATH</key>
<string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>
(увидеть: Документация по LaunchServicesKeys в Apple )
теперь приложение (в моем случае SourceTree) использует указанный путь и работает с git 1.9.3 :-)
PS: Конечно, вы должны настроить запись пути в соответствии с вашими потребностями.
Info.plist
вступить в силу.
Решение использует функциональность launchctl
в сочетании с Агент запуска имитировать учетные записи старых. Для других решений, использующих магазин launchd
, увидеть это сравнение ,
Используемый здесь агент запуска находится в / Library / LaunchAgents / :
<?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>user.conf.launchd</string>
<key>Program</key>
<string>/Users/Shared/conflaunchd.sh</string>
<key>ProgramArguments</key>
<array>
<string>~/.conf.launchd</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>StandardIO</string>
</array>
</dict>
</plist>
Одна важная вещь RunAtLoad ключ, чтобы запустить агент запуска в кратчайшие сроки.
Настоящая работа выполняется в скрипте оболочки /Users/Shared/conflaunchd.sh , который читает ~ / .Conf.launchd и кормит это launchctl
:
#! /bin/bash
#filename="$1"
filename="$HOME/.conf.launchd"
if [ ! -r "$filename" ]; then
exit
fi
eval $(/usr/libexec/path_helper -s)
while read line; do
# skip lines that only contain whitespace or a comment
if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi
eval launchctl $line
done <"$filename"
exit 0
Обратите внимание на зов path_helper
получить ДОРОЖКА настроить правильно. В заключение, ~ / .Conf.launchd выглядит так
setenv PATH ~/Applications:"${PATH}"
setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:
# Locale
setenv LANG en_US.UTF-8
Это 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
и добавьте строки
killall Dock
killall SystemUIServer
перезапустить док и менубар. После этого приложения, запущенные из Dock или из Spotlight, будут наследовать правильный PATH. Если вы используете Finder для запуска критически важных приложений, то killall Finder
может быть добавлено тоже.
в .bash_profile
Я использую линию
export PATH=`launchctl getenv PATH`
чтобы установить ПУТЬ для терминала, таким образом, ПУТЬ управляется из того же места, ~ / .Conf.launchd файл.
Ответ, предоставленный @flori, работает для меня на Maverick при условии, что я запустил следующие команды в Терминале после изменения файла plist
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
Другой вариант заключается в использовании /etc/launchd.conf
, Например я изменил по умолчанию PATH
добавив эту строку в /etc/launchd.conf
:
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
Вы можете применить изменения к /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
,