Установка переменных среды в OS X - PullRequest
826 голосов
/ 26 сентября 2008

Как правильно изменить переменные окружения, такие как PATH в OS X?

Я немного посмотрел в Google и нашел три разных файла для редактирования:

  • / и т.д. / пути
  • ~ / .profile
  • ~ / .tcshrc

У меня даже нет некоторых из этих файлов, и я уверен, что .tcshrc не так, поскольку OS X теперь использует bash. Где эти переменные, особенно PATH, определены?

Я работаю OS X v10.5 (Leopard).

Ответы [ 30 ]

15 голосов
/ 16 января 2009

Иногда все предыдущие ответы просто не работают. Если вы хотите иметь доступ к системной переменной (например, M2_HOME) в Eclipse или в IntelliJ IDEA, единственное, что мне подходит в этом случае:

Сначала (шаг 1) отредактируйте /etc/launchd.conf, чтобы он содержал такую ​​строку: «значение VAR setenv», а затем (шаг 2) перезагрузите компьютер.

Простое изменение .bash_profile не будет работать, потому что в OS X приложения не запускаются, как в других Unix'ах; они не наследуют переменные оболочки родителя. Все остальные модификации не будут работать по неизвестной мне причине. Может быть, кто-то еще может прояснить это.

13 голосов
/ 07 июля 2011

После погони за панелью предпочтений Переменные среды и обнаружением, что ссылка не работает, и поиск на сайте Apple, кажется, показывает, что они забыли об этом ... Я вернулся на след неуловимого процесс запуска.

В моей системе (Mac OS X 10.6.8) кажется, что переменные, определенные в environment.plist , надежно экспортируются в приложения, запущенные из Spotlight (с помощью launchd). Моя проблема в том, что эти переменные не экспортируются в новые сессии bash в Терминале. То есть У меня есть противоположная проблема, как изображено здесь.

ПРИМЕЧАНИЕ: environment.plist выглядит как JSON, а не XML, как описано ранее

Мне удалось получить приложения Spotlight для просмотра переменных путем редактирования ~ / MacOSX / environment.plist и Мне удалось принудительно ввести те же переменные в новый сеанс терминала, добавив в свой файл .profile следующее:

eval $(launchctl export)
10 голосов
/ 27 февраля 2014

Так же, как и в ответе Мэтта Кертиса, я устанавливаю переменные окружения с помощью launchctl, но оборачиваю его в функцию с именем export, так что всякий раз, когда я экспортирую переменную, как обычно, в мой .bash_profile, она также устанавливается launchctl. Вот что я делаю:

  1. Мой .bash_profile состоит только из одной строки (это просто личные предпочтения.)

    source .bashrc
    
  2. Мой .bashrc имеет это:

    function export()
    {
        builtin export "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
    
  3. Вышеприведенное перегрузит встроенный в Bash «экспорт» и будет экспортировать все нормально (вы заметите, что я экспортирую «экспорт» вместе с ним!), А затем правильно настроит их для сред приложений OS X через launchctl, независимо от того, используйте любое из следующего:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE
    # en_US.UTF-8
    PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}"
    export PATH
    # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
    
  4. Таким образом, мне не нужно каждый раз отправлять каждую переменную в launchctl, и я могу просто настроить мой .bash_profile / .bashrc так, как я хочу. Откройте окно терминала, проверьте интересующие вас переменные окружения с помощью launchctl getenv myVar, измените что-нибудь в своем .bash_profile / .bashrc, закройте окно терминала и снова откройте его, проверьте переменную снова с помощью launchctl и вуаля, это изменилось.

  5. Опять же, как и в других решениях для мира после появления Mountain Lion, для любых новых переменных среды, доступных для приложений, вам нужно запускать или перезапускать их после изменения.

10 голосов
/ 24 сентября 2013

Вот очень простой способ сделать то, что вы хотите. В моем случае он получал gradle на работу (для Android Studio)

  • Открыть терминал.
  • Запустите следующую команду:

    sudo nano /etc/paths или sudo vim /etc/paths

  • При появлении запроса введите пароль.

  • Перейдите в конец файла и введите путь, который вы хотите добавить.
  • Нажмите control-x, чтобы выйти.
  • Введите 'Y', чтобы сохранить измененный буфер.
  • Откройте новое окно терминала и введите:

    echo $PATH

Вы должны увидеть новый путь, добавленный в конец PATH

Я получил эти данные из этого поста:

http://architectryan.com/2012/10/02/add-to-the-path-on-mac-os-x-mountain-lion/#.UkED3rxPp3Q

Я надеюсь, что может помочь кому-то еще

10 голосов
/ 26 сентября 2008

Любой из файлов запуска Bash - ~/.bashrc, ~/.bash_profile, ~/.profile. Есть также какой-то странный файл с именем ~/.MacOSX/environment.plist для переменных среды в приложениях с графическим интерфейсом.

8 голосов
/ 02 декабря 2010

Я думаю, что ОП ищет простое решение, подобное Windows.

Вот, пожалуйста,

http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html

7 голосов
/ 09 ноября 2014

Для краткости и ясности, для чего предназначен каждый файл

  • ~/.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:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
5 голосов
/ 22 марта 2012

Переменная $PATH также зависит от path_helper, что, в свою очередь, использует файл /etc/paths и файлы в /etc/paths.d.

Более подробное описание можно найти здесь: http://hea -www.harvard.edu / ~ fine / OSX / path_helper.html

4 голосов
/ 07 января 2018

/ etc / launchd.conf не используется в Yosemite, El Capitain или (High) Sierra

со страницы руководства launchctl:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

Метод, описанный в этом ответе Другой вопрос работает для меня (после перезагрузки): приложения, запущенные из Dock или из Spotlight, наследуют переменные среды, которые я установил в ~/Library/LaunchAgents/my.startup.plist. (В моем случае мне нужно было установить LANG на en_US.UTF-8 для плагина Sublime Text.)

3 голосов
/ 25 января 2014

Все просто:

Отредактируйте ~ / .profile и поместите ваши переменные следующим образом

$ vim ~ / .profile

В файле положено:

MY_ENV_VAR = значение

  1. Сохранить (: wq)

  2. Перезагрузите терминал (выйдите и снова откройте его)

  3. Убедитесь, что все в порядке:

$ echo $ MY_ENV_VAR

$ value


...