Похоже, что launchd.conf
больше не загружает мою переменную окружения. Кто-нибудь еще заметил это?
Есть ли другое решение для постоянной установки переменных среды?
Похоже, что launchd.conf
больше не загружает мою переменную окружения. Кто-нибудь еще заметил это?
Есть ли другое решение для постоянной установки переменных среды?
Ответы:
Создайте
environment.plist
файл~/Library/LaunchAgents/
с этим содержимым:Вы можете добавить много
launchctl
команд внутри<string></string>
блока.plist
Активируется после перезагрузки системы. Вы также можете использоватьlaunchctl load ~/Library/LaunchAgents/environment.plist
его для немедленного запуска.[Редактировать]
Такое же решение работает и в El Capitan.
Xcode 7.0+ не оценивает переменные окружения по умолчанию. Старое поведение можно включить с помощью этой команды:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[Редактировать]
Есть пара ситуаций, когда это не совсем работает. Если компьютер будет перезагружен и выбрано «Повторно открывать окна при повторном входе в систему», вновь открытые окна могут не видеть переменные (возможно, они открываются до запуска агента). Кроме того, если вы войдете через ssh, переменные не будут установлены (поэтому вам нужно будет установить их в ~ / .bash_profile). Наконец, это не работает для PATH в Эль-Капитане и Сьерре. Это должно быть установлено через 'launchctl config user path ...' и в / etc / paths.
источник
UseSanitizedBuildSystemEnvironment
).[ Исходный ответ ]: Вы все еще можете использовать
launchctl setenv variablename value
для установки переменной, так чтобы она воспринималась всеми приложениями (графические приложения запускаются через Dock или Spotlight, в дополнение к тем, которые запускаются через терминал).Очевидно, вы не захотите делать это каждый раз, когда вы входите в систему.
[ Изменить ]: Чтобы избежать этого, запустите
AppleScript Editor
, введите команду, подобную этой:(Используйте несколько строк, если вы хотите установить несколько переменных)
Теперь сохраните (
⌘
+s
) как Формат файла: Приложение . Наконец, откройтеSystem Settings
→ Пользователи и группы → Элементы входа и добавьте новое приложение.[ Оригинальный ответ ]: Чтобы обойти это место, разместите все переменные, которые вы хотите определить в коротком скрипте оболочки, а затем взгляните на этот предыдущий ответ о том, как запустить скрипт при входе в MacOS . Таким образом, скрипт будет вызываться при входе пользователя в систему.
[ Редактировать ]: Ни одно из решений не является идеальным, поскольку переменные будут установлены только для этого конкретного пользователя, но я надеюсь / думаю, что это может быть все, что вам нужно.
Если у вас есть несколько пользователей, вы можете вручную установить элемент входа в систему для каждого из них или поместить копию com.user.loginscript.plist в каждый из своих локальных каталогов Library / LaunchAgents , указывая на один и тот же сценарий оболочки.
Конечно, ни один из этих обходных путей не так удобен, как /etc/launchd.conf .
[ Дальнейшее редактирование ]: пользователь ниже упоминает, что это не сработало для него. Однако я проверил на нескольких машинах Yosemite, и это работает для меня. Если у вас возникли проблемы, помните, что вам нужно будет перезапустить приложения, чтобы это вступило в силу. Кроме того, если вы устанавливаете переменные в терминале через ~ / .profile или ~ / .bash_profile , они будут переопределять настройки, установленные через launchctl setenv для приложений, запускаемых из оболочки .
источник
В Mac OS X 10.10 Yosemite можно установить переменные окружения с помощью 3 файлов + 2 команды.
Основной файл с определением переменных среды:
Определение сервиса для загрузки переменных среды для пользовательских приложений (терминал, IDE, ...):
То же определение сервиса для приложений пользователя root:
И наконец мы должны зарегистрировать эти сервисы:
Что мы получаем:
Проблемы / проблемы:
Для того чтобы ваши переменные env были правильно приняты приложениями после перезагрузки системы, вам потребуется:
Это происходит из-за того, что Apple запрещает явное упорядочение загруженных сервисов, поэтому переменные env регистрируются параллельно с обработкой «очереди повторного открытия».
Но на самом деле, я перезагружаю свою систему только несколько раз в год (при больших обновлениях), так что это не имеет большого значения.
источник
JAVA_HOME
), но не дляPATH
переменной (см. Мой вопрос о том, чтобы спросить другое ).launchd
, но разве нельзя было бы загрузить эти демоны при загрузке (т.е. до входа в систему)? Это должно обойти все проблемы, которые вы упоминаете.Цитируется из
Apple Developer Relations 10-Oct-2014 09:12 PM
Решение:
источник
/Library/LaunchDaemons
, и вместо того,launchctl
чтобы указывать запускатьlimit
команду, скажите ему выполнитьsetenv
команду сPATH
указанием строки пути в качестве аргументов.launchd
должен автоматически поднять его при запуске и сразу же получить видоизменения.<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Вот команды для восстановления старого поведения:
Теперь вы можете указать команды, как
setenv JAVA_HOME /Library/Java/Home
в/etc/launchd.conf
.Проверено на Эль Капитане.
источник
Что сработало для меня (вдохновлено благодарностью aax):
Вставьте это в /Library/LaunchDaemons/com.apple.launchd.limit.plist и перезагрузите компьютер:
Если вам это нужно шаг за шагом:
⌘+v
). Это приведет к ограничению до 16384 файлов на процесс и всего 16384 файловesc
затем:wq
Я надеюсь, что это помогло вам.
источник
Вы можете попробовать https://github.com/ersiner/osx-env-sync . Он обрабатывает как приложения командной строки, так и приложения с графическим интерфейсом из одного источника и работает с последней версией OS X (Yosemite).
Вы можете использовать подстановки путей и другие хитрости оболочки, поскольку то, что вы пишете, - это обычный bash-скрипт, который в первую очередь использует bash. Без ограничений. (Проверьте документацию osx-env-sync, и вы поймете, как это достигается.)
Я ответил на аналогичный вопрос здесь, где вы найдете больше.
источник
Решение состоит в том, чтобы добавить вашу переменную в
/etc/profile
. Тогда все работает как положено! Конечно, вы ДОЛЖНЫ сделать это как пользователь root с помощью sudo nano / etc / profile. Если вы отредактируете его любым другим способом, система будет жаловаться на поврежденный профиль / etc /, даже если вы измените права доступа на root.источник
Я добавил переменные в ~ / .bash_profile следующим образом. После того, как вы закончите, перезагрузите / выйдите и войдите
ПРИМЕЧАНИЕ: без перезапуска / выхода и входа в систему вы можете применить эти изменения, используя;
источник