Как правильно изменить переменные среды, такие как PATH в OS X?
Я немного заглянул в Google и нашел три разных файла для редактирования:
- / и т.д. / дорожки
- ~ / .Profile
- ~ / .Tcshrc
У меня даже нет некоторых из этих файлов, и я уверен, что .tcshrc не так, так как OS X теперь использует bash. Где эти переменные, особенно PATH, определены?
Я использую OS X v10.5 (Leopard).
macos
bash
path
environment-variables
Пол Уикс
источник
источник
env "switch.1.disabled=true" open -n /Applications/Eclipse.app/
запустить приложение с графическим интерфейсом с новой установленной системной средой.Ответы:
Бруно на верном пути. Я провел обширные исследования, и если вы хотите установить переменные, которые доступны во всех приложениях с графическим интерфейсом, ваш единственный вариант
/etc/launchd.conf
.Обратите внимание, что environment.plist не работает для приложений, запущенных через Spotlight. Это задокументировано Стивом Секстоном здесь .
Откройте окно терминала
Тип
sudo vi /etc/launchd.conf
(примечание: этот файл может еще не существовать)Поместите в файл следующее содержимое
Сохраните изменения в vi и перезагрузите Mac. Или используйте команду
grep
/,xargs
которая показана в комментарии к коду выше.Докажите, что ваши переменные работают, открыв окно терминала и набрав,
export
и вы должны увидеть новые переменные. Они также будут доступны в IntelliJ IDEA и других приложениях с графическим интерфейсом, которые вы запускаете через Spotlight.источник
launchd.conf
односторонняя, но требует перезагрузки (для перезапуска launchd). Если вы хотите избежать перезагрузки, см. Мой ответ stackoverflow.com/questions/135688/…Как настроить среду для новых процессов, запускаемых Spotlight (без перезагрузки)
Вы можете установить среду, используемую launchd (и, как следствие, все, что запускается из Spotlight) с помощью
launchctl setenv
. Например, чтобы установить путь:Или, если вы хотите настроить свой путь
.bashrc
или аналогичный, то отразите его в launchd:Нет необходимости перезагружаться, хотя вам нужно будет перезапустить приложение, если вы хотите, чтобы оно приняло измененную среду.
Это включает в себя все оболочки, уже запущенные в Terminal.app, хотя, если вы там, вы можете установить среду более напрямую, например, с помощью
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
bash или zsh.Как сохранить изменения после перезагрузки
Чтобы сохранить изменения после перезагрузки, вы можете установить переменные окружения
/etc/launchd.conf
, например, так:launchd.conf
выполняется автоматически при перезагрузке.Если вы хотите, чтобы эти изменения вступили в силу сейчас, вы должны использовать эту команду для повторной обработки
launchctl.conf
(спасибо @mklement за подсказку!)Вы можете узнать больше о
launchctl
том, как он загружается,launchd.conf
с помощью командыman launchctl
.источник
environment.plist
не происходит.etc/launchd.conf
перед тем, как перезагрузка будет использовать подход @ ответ MatthewMcCullough в:egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl
.До OS X v10.7 включительно (Lion) вы можете установить их в:
Видеть:
Для PATH в Терминале вы должны быть в состоянии установить
.bash_profile
или.profile
(возможно, вам придется создать его)Для OS X v10.8 (Mountain Lion) и выше вам нужно использовать
launchd
иlaunchctl
.источник
preferences.plist
было менее чем идеальным с OS X 10.5, так как в то времяpreferences.plist
не было прочитано для приложений, запущенных через центр внимания, см. Комментарий Луи к ответу Мэтью и email.esm.psu.edu/pipermail/macosx-emacs/2010-May /002113.html . Для OS X 10.6environment.plist
работает так же, как и должно.Решение как для командной строки, так и для приложений с графическим интерфейсом из одного источника (работает с Mac OS X 10.10 (Yosemite) и Mac OS X 10.11 (El Capitan))
Предположим, у вас есть определения переменных среды в вашем
~/.bash_profile
подобии в следующем фрагменте:Нам нужен агент запуска, который будет запускаться при каждом входе в систему и в любое время по требованию, который будет загружать эти переменные в пользовательский сеанс. Нам также понадобится сценарий оболочки для анализа этих определений и создания необходимых команд, которые будут выполняться агентом.
Создайте файл с
plist
суффиксом (например, namedosx-env-sync.plist
) в~/Library/LaunchAgents/
каталоге со следующим содержимым:-l
параметр является критическим здесь; это необходимо для выполнения сценария оболочки с оболочкой входа в систему, чтобы~/.bash_profile
он был получен в первую очередь перед выполнением этого сценария.Теперь скрипт оболочки. Создайте его
~/.osx-env-sync.sh
со следующим содержимым:Убедитесь, что скрипт оболочки является исполняемым:
Теперь загрузите агент запуска для текущего сеанса:
(Пере) Запустите приложение с графическим интерфейсом и убедитесь, что оно может читать переменные среды.
Настройка постоянна. Он выживет, перезапустится и войдет.
После первоначальной настройки (которую вы только что сделали), если вы хотите снова отразить какие-либо изменения в
~/.bash_profile
вашей среде, повторный запускlaunchctl load ...
команды не будет выполнять то, что вы хотите; вместо этого вы получите предупреждение, подобное следующему:<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress
Чтобы перезагрузить переменные окружения, не проходя процесс выхода из системы / входа, сделайте следующее:
Наконец, убедитесь, что вы перезапускаете уже работающие приложения (включая Terminal.app), чтобы они знали об изменениях.
Я также поместил здесь код и пояснения в проект GitHub: osx-env-sync .
Я надеюсь, что это будет окончательное решение, по крайней мере, для последних версий OS X (Yosemite & El Capitan).
источник
Делать:
Файл может не существовать (если нет, вы можете просто создать его).
Введите это и сохраните файл:
Запустить
источник
export
- это то, что я собирался предложить, поскольку BASH не поддерживаетsetenv
Существуют две проблемы, которые необходимо решить при работе с переменными среды в OS X. Первая - при вызове программ из Spotlight (значок увеличительного стекла в правой части меню / строки состояния Mac), а вторая - при вызове программ из Dock. , Вызов программ из приложения / утилиты терминала тривиален, поскольку он считывает среду из стандартных расположений оболочки (
~/.profile
,~/.bash_profile
,~/.bashrc
и т.д.)При вызове программ из Dock используйте,
~/.MacOSX/environment.plist
где<dict>
элемент содержит последовательность<key>KEY</key><string>theValue</string>
элементов.При вызове программ из Spotlight убедитесь, что launchd настроен со всеми необходимыми настройками ключ / значение.
Чтобы решить обе проблемы одновременно, я использую элемент входа (установленный с помощью инструмента «Системные настройки») в моей учетной записи пользователя. Элемент входа в систему представляет собой bash-скрипт, который вызывает функцию lisp Emacs, хотя, конечно, можно использовать их любимый инструмент для написания сценариев, чтобы выполнить то же самое. Этот подход имеет дополнительное преимущество, заключающееся в том, что он работает в любое время и не требует перезагрузки, т. Е. Можно редактировать
~/.profile
, запускать элемент входа в систему в некоторой оболочке и видеть изменения для вновь запускаемых программ из Dock или Spotlight.Подробности:
Элемент входа:
~/bin/macosx-startup
Функция Emacs lisp:
~/lib/emacs/elisp/macosx/envionment-support.el
ПРИМЕЧАНИЕ. Это решение представляет собой объединение тех, кто пришел до того, как я добавил свое, в частности, предложенное Мэттом Кертисом, но я намеренно пытался сохранить
~/.bash_profile
независимость своей платформы контента и перенести настройкуlaunchd
среды (средство только для Mac) в отдельный скрипт. ,источник
Другим бесплатным открытым исходным кодом Mac OS X v10.8 (Mountain Lion) Pane / environment.plist Preference является EnvPane .
Исходный код EnvPane доступен на GitHub . EnvPane выглядит она имеет сопоставимые функции в RCEnvironment , однако, кажется , что это может обновить свои сохраненные переменные мгновенно, т.е. без необходимости перезапуска или входа в систему, что приветствуется.
Как заявлено разработчиком:
Отказ от ответственности: я никоим образом не связан с разработчиком или его / ее проектом.
PS Мне нравится название (звучит как 'Ends Pain').
источник
Обновление (2017-08-04)
Начиная с (по крайней мере) macOS 10.12.6 (Sierra) этот метод, похоже, перестал работать для Apache httpd (как
system
дляuser
опции, так и для опцииlaunchctl config
). Другие программы, похоже, не пострадали. Вполне возможно, что это ошибка в httpd.Оригинальный ответ
Это касается OS X 10.10+ (10.11+, в частности, из-за режима без root, где
/usr/bin
без больше нет возможности записи).Я читал в нескольких местах, что использование
launchctl setenv PATH <new path>
для установкиPATH
переменной не работает из-за ошибки в OS X (которая кажется верной из личного опыта). Я обнаружил, чтоPATH
для приложений, не запускаемых из оболочки, можно установить другой способ :Эта опция задокументирована на странице руководства launchctl:
Я подтвердил это для работы с приложением с графическим интерфейсом, запущенным из Finder (который использует
getenv
для получения PATH). Обратите внимание, что вы должны сделать это только один раз, и изменения будут сохраняться после перезагрузки.источник
sudo launchctl procinfo <gui-pid>
показывает новую установленнуюPATH
среду. Но наsudo launchctl config user path <new path>
самом деле установлено для всех пользователей ... (подтверждается добавлением нового пользователя и использованием консоли Python Sublime Text)sudo launchctl config user path
этого (что вы, похоже, предполагаете?).launchctl
никак не позволяет установить произвольные переменные окружения.PATH
Переменная является исключением.На Mountain Lion все
/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
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.
Хотя ответы здесь не являются «неправильными», я добавлю еще один: никогда не вносите изменения переменных среды в OS X, которые влияют на «все процессы» или даже вне оболочки, для всех процессов, выполняемых в интерактивном режиме данным пользователем.
По моему опыту, глобальные изменения переменных среды, таких как PATH для всех процессов, с большей вероятностью могут сломать вещи в OS X, чем в Windows. Причиной этого является то, что многие приложения OS X и другое программное обеспечение (включая, возможно, особенно компоненты самой ОС) полагаются на инструменты командной строки UNIX изнутри и принимают на себя поведение версий этих инструментов, поставляемых с системой, и при этом не обязательно использовать абсолютные пути (аналогичные комментарии применяются к динамически загружаемым библиотекам и переменным окружения DYLD_ *). Предположим, например, что ответы с самыми высокими оценками на различные вопросы переполнения стека о замене предоставленных OS X версий интерпретаторов, таких как Python и Ruby, обычно говорят «не делайте этого».
В этом отношении OS X ничем не отличается от других UNIX-подобных операционных систем (например, Linux, FreeBSD и Solaris); Наиболее вероятная причина, по которой Apple не предоставляет простой способ сделать это, заключается в том, что это ломает вещи . В той степени, в которой Windows не так подвержена этим проблемам, это связано с двумя причинами: (1) программное обеспечение Windows не склонно полагаться на инструменты командной строки, как это делает программное обеспечение UNIX, и (2) Microsoft имела такая обширная история как «ада DLL», так и проблем безопасности, вызванных изменениями, которые влияют на все процессы, что они изменили поведение динамической загрузки в более новых версиях Windows, чтобы ограничить влияние «глобальных» параметров конфигурации, таких как PATH.
«Хромо» или нет, у вас будет гораздо более стабильная система, если вы ограничите такие изменения меньшими областями.
источник
Иногда все предыдущие ответы просто не работают. Если вы хотите иметь доступ к системной переменной (например
M2_HOME
) в Eclipse или в IntelliJ IDEA, единственное, что мне подходит в этом случае:Сначала (шаг 1) отредактируйте так,
/etc/launchd.conf
чтобы он содержал такую строку: «значение VAR setenv», а затем (шаг 2) перезагрузите компьютер.Простое изменение .bash_profile не будет работать, потому что в OS X приложения не запускаются, как в других Unix'ах; они не наследуют переменные оболочки родителя. Все остальные модификации не будут работать по неизвестной мне причине. Может быть, кто-то еще может прояснить это.
источник
После погони на панели настроек Переменные среды и обнаружения, что ссылка не работает, и поиск на сайте Apple, кажется, показывает, что они забыли об этом ... Я вернулся к следу неуловимого процесса запуска.
В моей системе (Mac OS X 10.6.8) кажется, что переменные, определенные в environment.plist , надежно экспортируются в приложения, запускаемые из Spotlight (с помощью launchd). Моя проблема в том, что эти переменные не экспортируются в новые сессии bash в Терминале. Т.е. у меня противоположная проблема, как здесь изображено.
ПРИМЕЧАНИЕ: environment.plist выглядит как JSON, а не XML, как описано ранее
Я смог заставить приложения Spotlight просматривать переменные, отредактировав ~ / MacOSX / environment.plist, и смог принудительно установить те же переменные в новую сессию терминала, добавив в свой файл .profile следующее:
источник
man launchd
,man launchctl
иman launchd.conf
в окне терминала. Рад, что Apple постоянно обновляет справочные страницы, даже если библиотека разработчиков Mac немного отстает.Любой из баша загрузочных файлов -
~/.bashrc
,~/.bash_profile
,~/.profile
. Есть также какой-то странный файл, названный~/.MacOSX/environment.plist
для переменных среды в приложениях с графическим интерфейсом.источник
Подобно ответу, который дал Мэтт Кертис, я устанавливал переменные окружения через launchctl, но я оборачивал его в функцию с именем export, так что всякий раз, когда я экспортирую переменную, как обычно, в мой .bash_profile, он также устанавливается launchctl. Вот что я делаю:
Мой .bash_profile состоит только из одной строки (это просто личные предпочтения.)
Мой .bashrc имеет это:
Вышеприведенное перегрузит встроенный «экспорт» Bash и экспортирует все нормально (вы заметите, что я экспортирую «экспорт» вместе с ним!), А затем правильно установит их для сред приложений OS X через launchctl, независимо от того, используете ли вы одно из следующего:
Таким образом, мне не нужно каждый раз отправлять каждую переменную в launchctl, и я могу просто настроить мой .bash_profile / .bashrc так, как я хочу. Откройте окно терминала, проверьте интересующие вас переменные окружения
launchctl getenv myVar
, измените что-нибудь в своем .bash_profile / .bashrc, закройте окно терминала и снова откройте его, проверьте переменную снова с помощью launchctl, и вуаля, она изменилась.Опять же, как и в других решениях для мира после появления Mountain Lion, для того, чтобы любые новые переменные среды были доступны для приложений, вам нужно запускать или перезапускать их после изменения.
источник
Вот очень простой способ сделать то, что вы хотите. В моем случае это заставляло Gradle работать (для Android Studio).
Запустите следующую команду:
sudo nano /etc/paths
илиsudo vim /etc/paths
Введите свой пароль, когда будет предложено.
Откройте новое окно терминала и введите:
echo $PATH
Вы должны увидеть новый путь, добавленный в конец PATH.
Я получил эти детали из этого поста:
Добавьте в PATH на Mac OS X 10.8 Mountain Lion и выше
источник
Я думаю, что ОП ищет простое, похожее на Windows решение.
Ну вот:
http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html
источник
Быть кратким и ясным о том, для чего предназначен каждый файл
~/.profile
источник каждый раз при запуске Terminal.app~/.bashrc
где «традиционно» задаются все операторы экспорта для среды Bash/etc/paths
является основным файлом в Mac OS, который содержит список путей по умолчанию для создания переменной среды PATH для всех пользователей/etc/paths.d/
содержит файлы, которые содержат дополнительные пути поискаНетерминальные программы не наследуют общесистемные переменные PATH и MANPATH, как ваш терминал! Чтобы установить среду для всех процессов, запускаемых конкретным пользователем, и, таким образом, сделать переменные среды доступными для приложений Mac OS X с графическим интерфейсом, эти переменные должны быть определены в вашем
~/.MacOSX/environment.plist
(Apple Technical Q & A QA1067)Используйте следующую командную строку для синхронизации
environment.plist
с/etc/paths
:источник
/etc/launchd.conf не используется в OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra) или macOS v10.13 (High Sierra).
Со
launchctl
страницы руководства :Метод, описанный в этом ответе Ask Different, работает для меня (после перезагрузки): приложения, запущенные из Dock или из Spotlight, наследуют переменные среды, которые я установил
~/Library/LaunchAgents/my.startup.plist
. (В моем случае, мне нужно , чтобы установитьLANG
, чтобыen_US.UTF-8
для текстового плагин Sublime.)источник
$PATH
Переменная также подлежитpath_helper
, в свою очередь , использует/etc/paths
файл и файлы в/etc/paths.d
.Более подробное описание можно найти в PATH и других проблемах среды в Leopard (2008-11).
источник
Это просто:
Отредактируйте ~ / .profile и поместите ваши переменные следующим образом
В файле положить:
Сохранить (: wq)
Перезапустите терминал (выйдите и снова откройте его)
Убедитесь, что все в порядке:
источник
Для однопользовательской модификации используйте
~/.profile
перечисленные вами. Следующая ссылка объясняет, когда Bash читает различные файлы.http://telin.ugent.be/~slippens/drupal/bashrc_and_others
Если вы хотите установить переменную окружения для приложений графического интерфейса, вам нужен файл ~ / .MacOSX / environment.plist
источник
Ну, я не уверен насчет
/etc/paths
и~/.MacOSX/environment.plist
файлов. Это новые.Но с Bash вы должны знать, что
.bashrc
выполняется с каждым новым вызовом оболочки и.bash_profile
выполняется только один раз при запуске.Я не знаю, как часто это происходит с Mac OS X. Я думаю, что различие сломалось из-за оконной системы, запускающей все.
Лично я устраняю путаницу, создавая
.bashrc
файл со всем, что мне нужно, а затем делаю:источник
В дополнение к предлагаемым подходам следует отметить, что, по крайней мере, в OS X 10.5 (Leopard) установленные переменные
launchd.conf
будут объединены с настройками, выполненными в.profile
. Я полагаю, что это может быть также верно для настроек~/.MacOSX/environment.plist
, но я не проверял.источник
Настройте переменную среды PATH в Mac OS
Откройте программу «Терминал» (по умолчанию она находится в папке «Программы / Утилиты»). Запустите следующую команду
Это откроет файл в текстовом редакторе по умолчанию.
Для Android SDK в качестве примера:
Вам необходимо добавить путь в каталог инструментов и инструментов платформы Android SDK. В моем примере я буду использовать «/ Development / android-sdk-macosx» в качестве каталога, в котором установлен SDK. Добавьте следующую строку:
Сохраните файл и выйдите из текстового редактора. Запустите ваш .bash_profile, чтобы обновить PATH:
Теперь каждый раз, когда вы открываете программу Terminal, ваш PATH будет включать Android SDK.
источник
Просто сделал это действительно легко и быстро. Сначала создайте ~ / .bash_profile из терминала:
тогда
Добавить
сохранить документ, и все готово.
источник
Это довольно просто. Редактировать файл
.profile
(vi, nano , Sublime Text или другой текстовый редактор). Вы можете найти его в~/
каталоге (каталог пользователя) и установить так:Пример с домом Java:
Сохраните его и вернитесь в терминал.
Вы можете перезагрузить его с помощью:
Или закройте и откройте окно терминала.
источник
Здесь есть два типа снарядов.
Важно понимать , что здесь с Bash, файл
.bashrc
только для чтения оболочки, это и интерактивных и не Логин, и вы увидите , что люди часто загружают.bashrc
в ,.bash_profile
чтобы преодолеть это ограничение.Теперь, когда у вас есть базовое понимание, давайте перейдем к тому, как я бы посоветовал вам его настроить.
.bash_file:
источник
Войти Оболочки
Оболочка сначала выполняет команды в файле
/etc/profile
. Пользователь, работающий с привилегиями суперпользователя, может настроить этот файл, чтобы установить общесистемные характеристики по умолчанию для пользователей, работающих под управлением Bash.Далее выглядят оболочки для
~/.bash_profile
,~/.bash_login
и~/.profile
(~ / является кратко- рука для вашей домашней директории), в указанном порядке, выполнение команд в первом из этих файлов , которые он находит. Вы можете поместить команды в один из этих файлов, чтобы переопределить значения по умолчанию, установленные в/etc/profile
. Оболочка, работающая на виртуальном терминале, не выполняет команды в этих файлах.Когда вы выходите из системы, bash выполняет команды в
~/.bash_logout
файле. Этот файл часто содержит команды, которые очищают после сеанса, например, те, которые удаляют временные файлы.Интерактивные нелогиновые оболочки
Хотя bash не
~/.bashrc
вызывается напрямую, многие файлы вызывают/etc/bashrc
. Эта настройка позволяет пользователю, работающему с привилегиями root, устанавливать общесистемные характеристики по умолчанию для нелогиновых командных оболочек.Интерактивная нелогинная оболочка выполняет команды в
~/.bashrc
файле. Как правило, файл запуска для оболочки входа в систему, например.bash_profile
, запускает этот файл, поэтому команды как для входа в систему, так и для входа не в журнал запускают команды.bashrc
.Поскольку команды in
.bashrc
могут выполняться много раз и поскольку подоболочки наследуют экспортированные переменные, рекомендуется поместить в.bash_profile
файл команды, которые добавляют к существующим переменным .источник
Вся магия на iOS связана только с использованием
source
файла, куда вы экспортируете переменные окружения.Например:
Вы можете создать файл так:
Сохраните этот файл как
bimbom.env
и сделайтеsource ./bimbom.ev
. Вуаля, у тебя есть переменные среды.Проверьте их с помощью:
источник
Для Bash попробуйте добавить переменные среды в файл,
/etc/profile
чтобы сделать их доступными для всех пользователей. Не нужно перезагружаться, просто начните новый сеанс терминала.источник