Обновление: ссылка ниже не имеет полного ответа . Необходимость указывать путь или переменную в двух местах (одно для графического интерфейса пользователя, а другое для оболочки) неэффективно.
Не дублирует : установка переменных среды в OS X?
Исходя из фона Windows, где очень легко устанавливать и изменять переменные среды (просто перейдите в «Свойства системы»> «Дополнительно»> «Переменные среды»), в Mac OS 10.5 это не так уж и просто. Большинство ссылок говорят, что я должен обновить / etc / profile или ~ / .profile. Являются ли они эквивалентом системных переменных и пользовательских переменных? Например, где я должен установить свою JAVA_HOME
переменную?
РЕДАКТИРОВАТЬ:
Я хочу иметь возможность доступа к переменной из терминала, а также из приложения, такого как Eclipse. Кроме того, я надеюсь, что мне не нужно перезапускать / выходить из системы, чтобы это вступило в силу.
источник
Ответы:
Там нет необходимости для дублирования. Вы можете установить переменные окружения, используемые launchd (и дочерние процессы, т.е. все, что вы запускаете из Spotlight), используя
launchctl setenv
.Например, если вы хотите отразить ваш текущий путь в launchd после его настройки
.bashrc
или где-то еще:Переменные среды не обновляются автоматически в запущенных приложениях. Вам нужно будет перезапустить приложения, чтобы получить обновленные переменные среды (хотя вы можете просто установить переменные в вашей оболочке, например
PATH=whatever:you:want
, нет необходимости перезапускать терминал).источник
launchctl setenv
кажутся видимыми только пользователю, вносящему изменения. Если я установлю переменную как обычный пользователь, она не будет видна пользователю root (через sudo) и наоборот.ps aux | grep launchd
покажет это. Также проверьтеman sudo
, какие документыsudo
(по умолчанию) преднамеренно сбрасывают среду -sudo -E
сохранит ли она среду (включая переменные, которые вы установилиlaunchctl setenv
). Кстати, у вас есть актуальная заявка на это? Если так, этот метод работает для вас?Есть несколько мест, где вы можете установить переменные окружения.
~/.profile
: используйте это для переменных, которые вы хотите установить во всех программах, запускаемых из терминала (обратите внимание, что, в отличие от Linux, все оболочки, открытые в Terminal.app, являются оболочками входа в систему).~/.bashrc
: это вызывается для оболочек, которые не являются оболочками входа в систему. Используйте это для псевдонимов и других вещей, которые должны быть переопределены в подоболочках, а не для переменных среды, которые наследуются./etc/profile
: загружается до ~ / .profile, но в остальном эквивалентно. Используйте его, когда хотите, чтобы переменная применялась к терминальным программам, запускаемым всеми пользователями на машине (при условии, что они используют bash).~/.MacOSX/environment.plist
: это читается в loginwindow при входе в систему. Это относится ко всем приложениям, включая приложения с графическим интерфейсом, кроме тех, которые запущены Spotlight в 10.5 (не в 10.6). Чтобы изменения вступили в силу, вам необходимо выйти из системы и войти снова. Этот файл больше не поддерживается с OS X 10.8.launchd
экземпляр вашего пользователя : это относится ко всем программам, запускаемым пользователем, GUI и CLI. Вы можете применить изменения в любое время, используяsetenv
команду вlaunchctl
. Теоретически вы должны иметь возможность вводитьsetenv
команды~/.launchd.conf
иlaunchd
автоматически их читать, когда пользователь входит в систему, но на практике поддержка этого файла никогда не осуществлялась. Вместо этого вы можете использовать другой механизм для выполнения сценария при входе в систему и использовать этот сценарийlaunchctl
для настройкиlaunchd
среды./etc/launchd.conf
: это читается командой launchd при запуске системы и при входе пользователя в систему. Они влияют на каждый отдельный процесс в системе, поскольку launchd является корневым процессом. Чтобы применить изменения к запущенному root launchd, вы можете передать команды вsudo launchctl
.Основные вещи для понимания:
launchctl
; обновленные переменные затем наследуются всеми новыми процессами, которые он затем разветвляет.Пример установки переменной среды с помощью launchd:
Теперь запустите ваше приложение с графическим интерфейсом, которое использует переменную, и вуаля!
Чтобы обойти тот факт, что
~/.launchd.conf
это не работает, вы можете поместить следующий скрипт~/Library/LaunchAgents/local.launchd.conf.plist
:Затем вы можете положить
setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
внутрь~/.launchd.conf
, и это будет выполняться при каждом входе в систему.Обратите внимание, что при такой передаче списка команд в launchctl вы не сможете устанавливать переменные окружения со значениями, содержащими пробелы. Если вам нужно сделать это так, вы можете позвонить launchctl следующим образом :
launchctl setenv MYVARIABLE "QUOTE THE STRING"
.Также обратите внимание, что другие программы, которые запускаются при входе в систему, могут выполняться до запуска агента, и, следовательно, могут не видеть переменные среды, которые он устанавливает.
источник
~/.MacOSX/environment.plist
, на мой лев он будет читать и используется. Просто проверил это. Я на самом деле предпочитаю это, а не .launchd.conf, потому что я использую панель настроек RCenvironment, чтобы поддерживать это.~/.launchd.conf
к работе над 10.6.8 - похоже, это не имеет никакого эффекта. Также на странице man сказано, что этот файл в данный момент не поддерживается.~/.launchd.conf
он все еще не поддерживается и не работает с OS X 10.8.3? Смотритеman launchd.conf
Я думаю, что OP ищет простое, похожее на Windows решение.
вот и я
https://www.macupdate.com/app/mac/14617/rcenvironment
источник
Вы можете прочитать о Linux, который довольно близок к тому, что Mac OS X. Или вы можете прочитать о BSD Unix, который немного ближе. По большей части различия между Linux и BSD невелики.
/etc/profile
системные переменные среды~/.profile
пользовательские переменные среды."где я должен установить переменную JAVA_HOME?"
/etc/profile
?Как правило, я предпочитаю не связываться с общесистемными настройками, хотя я единственный пользователь. Я предпочитаю редактировать свои локальные настройки.
источник
Для приложений с графическим интерфейсом вам придется создавать и редактировать
~/.MacOSX/environment.plist
. Подробнее здесь . Вам нужно будет выйти, чтобы они вступили в силу. Я не уверен, влияют ли они также на приложения, запускаемые из терминала, но я предполагаю, что они будут.Для приложений, запущенных из терминала, вы также можете отредактировать файл ~ / .profile.
источник
Просто откройте
~/.profile
файл черезnano
терминал и введите там:Сохраните этот файл (cmd + X и Y). После этого, пожалуйста, выйдите из системы / войдите снова или просто откройте новую вкладку в Терминале и попробуйте использовать новую переменную.
ПОЖАЛУЙСТА, НЕ забывайте добавлять ": $ PATH" после того, что вы хотите, иначе вы удалите все пути в переменной PATH, которые были до этого.
источник
Синхронизируйте переменные среды OS X для приложений командной строки и графического интерфейса из одного источника с помощью osx-env-sync .
Я также разместил ответ на связанный вопрос здесь .
источник
Если вы хотите постоянно изменять переменные окружения в macOS, установите их в
/etc/paths
. Обратите внимание , что этот файл доступен только для чтения по умолчанию, поэтому вам придется использовать chmod для разрешения записи.источник
/usr/bin/local
в этом файле, даже без изменения файла, так было по умолчанию, и все же мои приложения с графическим интерфейсом видят только/usr/bin:/bin:/usr/sbin:/sbin
. Я много раз перезагружался.cat /etc/paths/
?Для пользователей Mac OS X Catalina 2020 года:
Забудьте о других бесполезных ответах, здесь нужно всего два шага:
Создайте файл с соглашением об именах: priority-appname. Затем скопируйте и вставьте путь, который вы хотите добавить
PATH
.Например,
80-vscode
с содержанием/Applications/Visual Studio Code.app/Contents/Resources/app/bin/
в моем случае.Переместите этот файл в
/etc/paths.d/
. Не забудьте открыть новую вкладку (новый сеанс) в Терминале и напечатать,echo $PATH
чтобы проверить, что ваш путь добавлен!Обратите внимание: этот метод только добавляет ваш путь к
PATH
.источник