Переменные среды в Mac OS X
Update: ссылка ниже не имеет полного ответа. Необходимость устанавливать путь или переменную в двух местах (один для GUI и один для shell) хромает.
не дубликат: Настройка переменных среды в OS X?
исходя из фона Windows, где очень легко установить и изменить переменные среды (просто перейдите к свойствам системы > Дополнительно > Переменные среды), кажется, что это не так прямо вперед на Mac OS 10.5. Большинство ссылок говорят, что я должен обновить /etc/profile или ~/.профиль. Эквивалентны ли они системным и пользовательским переменным? Например, где я должен установить свой JAVA_HOME
переменной?
изменить:
Я хочу иметь доступ к переменной из терминала, а также к приложению, такому как Eclipse. Кроме того, я надеюсь, что мне не придется перезапускать/выходить из системы, чтобы это вступило в силу.
8 ответов
нет необходимости в дублировании. Вы можете установить переменные среды, используемые launchd (и дочерние процессы, т. е. все, что вы начинаете с Spotlight), используя launchctl setenv
.
например, если вы хотите отразить свой текущий путь в launchd после его настройки в .bashrc
или где:
PATH=whatever:you:want
launchctl setenv PATH $PATH
переменные среды не обновляются автоматически при запуске приложений. Вам нужно будет перезапустить приложения, чтобы получить обновленные переменные среды (хотя вы можете просто установите переменные в своей оболочке, например PATH=whatever:you:want
; нет необходимости перезапускать терминал).
есть несколько мест, где вы можете установить переменные среды.
-
~/.profile
: используйте это для переменных, которые вы хотите установить во всех программах, запущенных с терминала (обратите внимание, что, в отличие от Linux, все оболочки открыты в терминале.app являются оболочками входа). -
~/.bashrc
: такой вызывается для оболочек, которые не являются оболочками для входа. Используйте это для псевдонимов и других вещей, которые необходимо переопределить в подэлементах, а не для переменных среды, которые унаследованный. -
/etc/profile
: это загружается до ~/.профиль, но в остальном эквиваленте. Используйте его, когда вы хотите, чтобы переменная применялась к терминальным программам, запущенным всеми пользователями на машине (при условии, что они используют bash). -
~/.MacOSX/environment.plist
: это читается loginwindow при входе в систему. Это относится ко всем приложениям, включая GUI, за исключением тех, которые запущены Spotlight в 10.5 (не 10.6). Для вступления изменений в силу требуется выйти из системы и снова войти в систему. Этого файла больше нет поддерживается с OS X 10.8. - пользователя
launchd
экземпляр: это относится ко всем программам, запущенным пользователем, GUI и CLI. Вы можете применить изменения в любое время с помощью наlaunchctl
. в теории, вы должны быть в состоянии поставитьsetenv
команды~/.launchd.conf
иlaunchd
читал бы их автоматически, когда пользователь входит в систему, но на практике поддержка этого файла никогда не была реализована. Вместо этого можно использовать другой механизм для выполнения скрипта на войдите в систему и вызовите этот скриптlaunchctl
настройкаlaunchd
окружающая среда. -
/etc/launchd.conf
: это считывается launchd при запуске системы и при входе пользователя в систему. Они влияют на каждый процесс в системе, потому что launchd является корневым процессом. Чтобы применить изменения к запуску root launchd, вы можете передать команды вsudo launchctl
.
основные вещи, которые нужно понять:
- переменные окружения наследуются дети в то время, когда они раскошелились.
- корневой процесс является экземпляром launchd, и существует также отдельный экземпляр launchd на сеанс пользователя.
- launchd позволяет изменять текущие переменные среды с помощью
launchctl
; обновленные переменные затем наследуются всеми новыми процессами, которые он развивает с тех пор.
пример установки переменной среды с помощью launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
теперь запустите приложение GUI, которое использует переменную, и вуаля!
чтобы обойти тот факт, что ~/.launchd.conf
не работает, вы можете поместить следующий скрипт в ~/Library/LaunchAgents/local.launchd.conf.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>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
затем вы можете поставить setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
внутри ~/.launchd.conf
, и он будет выполняться при каждом входе в систему.
обратите внимание, что при передаче списка команд в launchctl таким образом вы не сможете установить переменные среды со значениями, содержащими пробелы. Если вам нужно это сделать, вы можете вызвать launchctl следующим образом: launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
также обратите внимание, что другие программы, которые запускаются при входе в систему, могут выполняться перед launchagent и, таким образом, могут не видеть переменные среды, которые он устанавливает.
вы можете прочитать в linux, что довольно близко к тому, что Mac OS X. Или вы можете прочитать на BSD Unix, который немного ближе. По большей части, различия между Linux и BSD не много.
/etc/profile
переменные среды.
~/.profile
пользовательские переменные среды.
" где я должен установить переменную JAVA_HOME?"
- у вас есть несколько пользователей? Их это волнует? Ты бы испортил что-нибудь? другой пользователь вверх, изменив
/etc/profile
?
как правило, я предпочитаю не связываться с общесистемными настройками, хотя я единственный пользователь. Я предпочитаю редактировать мои локальные настройки.
для приложений GUI вам придется создавать и редактировать ~/.MacOSX/environment.plist
. Подробнее здесь. Вы должны выйти, чтобы они вступили в силу. Я не уверен, что они также влияют на приложения, запущенные с терминала, но я предполагаю, что они будут.
для приложений, запущенных с терминала, вы также можете редактировать~/.файл профиля.
открой , через nano
в терминале и введите там:
export PATH=whatever/you/want:$PATH
Сохраните этот файл (cmd+X и Y). После этого выйдите из системы / войдите снова или просто откройте новую вкладку в терминале и попробуйте использовать новую переменную.
пожалуйста, не забудьте добавить": $PATH " после того, что / вы / хотите, иначе вы сотрете все пути в переменной PATH, которые были там до этого.
синхронизация переменных среды OS X для приложений командной строки и GUI из одного источника с помощью osx-env-sync.
Я отвечал на вопрос здесь.
Если вы хотите постоянно изменять переменные среды на El Capitan, установите их в /etc/paths
. Примечание этот файл доступен только для чтения по умолчанию, так что вам придется chmod для записи.