Установка переменных среды в OS X

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

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

  • / и т.д. / дорожки
  • ~/.Profile
  • ~/.Tcshrc

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

Я использую OS X v10.5 (Leopard).

33 ответа

Бруно находится на правильном пути. Я провел обширные исследования, и если вы хотите установить переменные, которые доступны во всех приложениях с графическим интерфейсом, ваш единственный вариант /etc/launchd.conf,

Обратите внимание, что environment.plist не работает для приложений, запущенных через Spotlight. Это задокументировано Стивом Секстоном здесь.

  1. Откройте окно терминала

  2. Тип sudo vi /etc/launchd.conf (примечание: этот файл может еще не существовать)

  3. Поместите в файл следующее содержимое

    # Set environment variables here so they are available globally to all apps
    # (and Terminal), including those launched via Spotlight.
    #
    # After editing this file run the following command from the terminal to update
    # environment variables globally without needing to reboot.
    # NOTE: You will still need to restart the relevant application (including
    # Terminal) to pick up the changes!
    # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
    #
    # See http://www.digitaledgesw.com/node/31
    # and http://stackru.com/questions/135688/setting-environment-variables-in-os-x/
    #
    # Note that you must hardcode the paths below, don't use environment variables.
    # You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
    #
    setenv JAVA_VERSION 1.6
    setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    setenv GROOVY_HOME /Applications/Dev/groovy
    setenv GRAILS_HOME /Applications/Dev/grails
    setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
    setenv JRUBY_HOME /Applications/Dev/jruby
    
    setenv ANT_HOME /Applications/Dev/apache-ant
    setenv ANT_OPTS -Xmx512M
    
    setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
    setenv M2_HOME /Applications/Dev/apache-maven
    
    setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
    
  4. Сохраните изменения в vi и перезагрузите Mac. Или используйте grep / xargs команда, которая показана в комментарии к коду выше.

  5. Докажите, что ваши переменные работают, открыв окно терминала и набрав export и вы должны увидеть ваши новые переменные. Они также будут доступны в IntelliJ IDEA и других приложениях с графическим интерфейсом, которые вы запускаете через Spotlight.

Как настроить среду для новых процессов, запускаемых Spotlight (без перезагрузки)

Вы можете установить среду, используемую launchd (и, соответственно, все, что запускается из Spotlight) с помощью launchctl setenv, Например, чтобы установить путь:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

Или, если вы хотите настроить свой путь в .bashrc или подобный, тогда отразите это в launchd:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

Нет необходимости перезагружаться, хотя вам нужно будет перезапустить приложение, если вы хотите, чтобы оно подхватило измененную среду.

Это включает в себя все оболочки, уже запущенные в Terminal.app, хотя, если вы там, вы можете настроить среду более напрямую, например, с помощью export PATH=/opt/local/bin:/opt/local/sbin:$PATH для баш или зш.

Как сохранить изменения после перезагрузки

Чтобы сохранить изменения после перезагрузки, вы можете установить переменные окружения из /etc/launchd.conf, вот так:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf выполняется автоматически при перезагрузке.

Если вы хотите, чтобы эти изменения вступили в силу сейчас, вы должны использовать эту команду для повторной обработки launchctl.conf (спасибо @mklement за подсказку!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

Вы можете узнать больше о launchctl и как он загружается launchd.conf с командой man launchctl,

До OS X v10.7 включительно (Lion) вы можете установить их в:

~/.MacOSX/environment.plist

Увидеть:

Для PATH в Терминале вы должны установить .bash_profile или же .profile (вероятно, вам придется создать его)

Для OS X v10.8 (Mountain Lion) и выше вам нужно использовать launchd а также launchctl,

Решение как для командной строки, так и для приложений с графическим интерфейсом из одного источника (работает с Yosemite & El Capitan)

Предположим, у вас есть определения переменных среды в вашем ~/.bash_profile как в следующем фрагменте:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

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

Создать файл с plist суффикс (например, названный osx-env-sync.plist) в ~/Library/LaunchAgents/ каталог со следующим содержимым:

<?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>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

-l параметр является критическим здесь; это необходимо для выполнения сценария оболочки с оболочкой входа в систему, чтобы ~/.bash_profile прежде всего, выполняется этот сценарий.

Теперь скрипт оболочки. Создайте это в ~/.osx-env-sync.sh со следующим содержанием:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv ${envvar} ${!envvar}
done

Убедитесь, что скрипт оболочки является исполняемым:

chmod +x ~/.osx-env-sync.sh

Теперь загрузите агент запуска для текущего сеанса:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(Пере) Запустите приложение с графическим интерфейсом и убедитесь, что оно может читать переменные среды.

Настройка постоянна. Он выживет, перезапустится и войдет.

После первоначальной настройки (которую вы только что сделали), если вы хотите отразить какие-либо изменения в вашем ~/.bash_profile снова для всей вашей среды, launchctl load ... команда не будет выполнять то, что вы хотите; вместо этого вы получите предупреждение, подобное следующему:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

Чтобы перезагрузить переменные окружения, не проходя процесс выхода из системы, выполните следующие действия:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

Наконец, убедитесь, что вы перезапускаете уже работающие приложения (включая Terminal.app), чтобы они знали об изменениях.

Я также поместил здесь код и пояснения в проект GitHub: osx-env-sync.

Я надеюсь, что это будет окончательное решение, по крайней мере для последних версий OS X (Yosemite & El Capitan).

1.

vim ~/.bash_profile

Файл может не существовать (если нет, вы можете просто создать его).

2. введите это и сохраните файл:

export PATH=$PATH:YOUR_PATH_HERE

3.run

source ~/.bash_profile

Существуют две проблемы, которые необходимо решить при работе с переменными среды в 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

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Функция Emacs lisp: ~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

ПРИМЕЧАНИЕ. Это решение объединяет тех, кто пришел до того, как я добавил свое, особенно предложенное Мэттом Кертисом, но я намеренно пытался сохранить свои ~/.bash_profile контентная платформа независима и ставит настройку launchd окружение (только для Mac) в отдельный скрипт.

Другим бесплатным открытым исходным кодом Mac OSX Mountain Lion (10.8) Pane Preference / environment.plist является EnvPane.

Исходный код EnvPane доступен на Github. Похоже, что EnvPane имеет сравнимые функции с RCEnvironment, однако, похоже, он может мгновенно обновлять свои сохраненные переменные, то есть без необходимости перезапуска или входа в систему, что приветствуется.

Как заявлено разработчиком:

EnvPane - это панель настроек для Mac OS X 10.8 (Mountain Lion), которая позволяет вам устанавливать переменные среды для всех программ как в графическом, так и в терминальном сеансах. Он не только восстанавливает поддержку ~/.MacOSX/environment.plist в Mountain Lion, но и немедленно публикует ваши изменения в среде, без необходимости выхода и повторного входа.
<Вырезано>
EnvPane включает (и автоматически устанавливает) агент launchd, который запускается 1) рано после входа в систему и 2) всякий раз, когда изменяется ~/.MacOSX/environment.plist. Агент читает ~/.MacOSX/environment.plist и экспортирует переменные среды из этого файла в экземпляр launchd текущего пользователя через тот же API, который используется launchctl setenv и launchctl unsetenv.

Отказ от ответственности: я никоим образом не связан с разработчиком или его / ее проектом.

PS Мне нравится название (звучит как "Ends Pain").

На Горе Льва все /etc/paths а также /etc/launchd.conf редактирование не имеет никакого эффекта!

Форумы разработчиков Apple говорят:

Msgstr "Измените Info.plist самого.app, чтобы он содержал словарь"LSEnvironment"с необходимыми переменными среды.

~ /.MacOSX / environment.plist больше не поддерживается. "

Так что я непосредственно отредактировал приложение Info.plist (щелкните правой кнопкой мыши "AppName.app" (в данном случае SourceTree), а затем "Show package contents")

Показать содержимое пакета

и добавил новую пару ключ /dict под названием:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(см.: Документация по LaunchServicesKeys в Apple)

теперь приложение (в моем случае SourceTree) использует указанный путь и работает с git 1.9.3:-)

PS: Конечно, вы должны настроить запись пути в соответствии с вашими потребностями.

Обновление (2017-08-04)

Начиная с (по крайней мере) macOS 10.12.6 (Sierra) этот метод, похоже, перестал работать для Apache httpd (как для system и user вариант launchctl config). Другие программы, похоже, не пострадали. Вполне возможно, что это ошибка в httpd.

Оригинальный ответ

Это касается OS X 10.10+ (10.11+, в частности, из-за режима без прав доступа, где /usr/bin больше не для записи).

Я прочитал в нескольких местах, что с помощью launchctl setenv PATH <new path> установить PATH переменная не работает из-за ошибки в OS X (которая кажется верной из личного опыта). Я обнаружил, что есть еще один способ PATH можно установить для приложений, не запускаемых из оболочки:

sudo launchctl config user path <new path>

Эта опция задокументирована на странице руководства launchctl:

система конфигурации | значение параметра пользователя

Устанавливает постоянную информацию о конфигурации для доменов launchd(8). Только системный домен и пользовательские домены могут быть настроены. Расположение постоянного хранилища является деталью реализации, и изменения в этом хранилище следует вносить только с помощью этой подкоманды. Чтобы изменения вступили в силу с помощью этой подкоманды, требуется перезагрузка.

[...]

дорожка

Устанавливает переменную среды PATH для всех служб в целевом домене в строковое значение. Строковое значение должно соответствовать формату, указанному для переменной среды PATH в Environment (7). Обратите внимание, что если служба указывает свой собственный PATH, переменная среды для службы будет иметь приоритет.

ПРИМЕЧАНИЕ. Это средство нельзя использовать для установки общих переменных среды для всех служб в домене. Он намеренно ограничен переменной среды PATH и ничем иным из соображений безопасности.

Я подтвердил это для работы с приложением GUI, запущенным из Finder (который использует getenv чтобы получить путь). Обратите внимание, что вы должны сделать это только один раз, и изменения будут сохраняться после перезагрузки.

Хотя ответы здесь не являются "неправильными", я добавлю еще один: никогда не вносите изменения переменных среды в 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 следующее:

eval $(launchctl export)

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

Февраль 2022 г. (MacOs 12+)

Решения здесь должны работать после перезагрузки или перезапуска приложения.

CLI

Откройте выбранный файл конфигурации CLI.

  • Для баш открыть ~/.bash_profile
  • Для зш открыть ~/.zshrc

добавить (или заменить)

      export varName=varValue 

(если varValueв нем есть пробелы - заверните его ")

Обязательно перезапустите приложение командной строки.

графический интерфейс

Выполните шаг CLI. Убедитесь, что приложение GUI закрыто. Откройте приложение с графическим интерфейсом из командной строки. Например:

      open /Applications/Sourcetree.app

(вы также можете использовать псевдоним для этой команды в .zshrc)

Принципы

  • Mac не имеет параметров конфигурации, которые устанавливают переменную среды для всех контекстов.
  • Избегайте изменения чего-либо за пределами вашего профиля пользователя.

Больше не работает

  • launchctl config user varName varVal(МакОС 12.1+)
  • Редактирование /etc/launchd.conf
  • xml-файл с plistсуффикс

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

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

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

  • Введите свой пароль, когда будет предложено.

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

    echo $PATH

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

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

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

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

Подобно ответу, который дал Мэтт Кертис, я устанавливал переменные окружения с помощью 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, для того, чтобы любые новые переменные среды были доступны для приложений, вам нужно запускать или перезапускать их после изменения.

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

Ну вот:

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

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

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

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

  • ~/.profile источник каждый раз при запуске Terminal.app
  • ~/.bashrc где "традиционно" задаются все операторы экспорта для среды Bash
  • /etc/paths является основным файлом в Mac OS, который содержит список путей по умолчанию для создания переменной среды PATH для всех пользователей
  • /etc/paths.d/ содержит файлы, которые содержат дополнительные пути поиска

Нетерминальные программы не наследуют общесистемные переменные PATH и MANPATH, как ваш терминал! Чтобы установить среду для всех процессов, запускаемых конкретным пользователем, и, таким образом, сделать переменные среды доступными для приложений Mac OS X GUI, эти переменные должны быть определены в вашем ~/.MacOSX/environment.plist (Apple, технические вопросы и ответы QA1067)

Используйте следующую командную строку для синхронизации вашего environment.plist с /etc/paths:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"

/etc/launchd.conf не используется в Йосемити, Эль-Капитане или (Высокой) Сьерре

От 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.)

Просто сделал это действительно легко и быстро. Сначала создайте ~/.bash_profile из терминала:

touch .bash_profile

затем

open -a TextEdit.app .bash_profile

добавлять

export TOMCAT_HOME=/Library/Tomcat/Home

сохранить документ, и все готово.

Вся магия на IOS идет только с использованием source с файлом, куда вы экспортируете свои переменные ENV.

Например:

Вы можете создать файл следующим образом:

export bim=fooo
export bom=bar

Сохранить этот файл как bimbom.env, и делать source ./bimbom.evВуаля, вы получили свои переменные ENV.

Проверьте их с помощью:echo $bim

Это просто:

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

$ vim ~/.profile

В файле положить:

MY_ENV_VAR = значение

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

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

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

$ echo $ MY_ENV_VAR

$ value


Ну, я не уверен насчет /etc/paths а также ~/.MacOSX/environment.plist файлы. Это новые.

Но с Bash вы должны знать, что .bashrc выполняется с каждым новым вызовом оболочки и .bash_profile выполняется только один раз при запуске.

Я не знаю, как часто это происходит с Mac OS X. Я думаю, что различие сломалось с оконной системой, запускающей все.

Лично я устраняю путаницу, создавая .bashrc файл со всем, что мне нужно, а затем сделать:

ln -s .bashrc .bash_profile

Настройте переменную среды PATH в Mac OS

Откройте программу "Терминал" (по умолчанию она находится в папке "Программы / Утилиты"). Запустите следующую команду touch ~/.bash_profile; open ~/.bash_profile Это откроет файл в текстовом редакторе по умолчанию.

Для ANDROID SDK в качестве примера:

Вам нужно добавить путь в каталог инструментов и инструментов платформы Android SDK. В моем примере я буду использовать "/Development/android-sdk-macosx" в качестве каталога, в котором установлен SDK. Добавьте следующую строку:

export PATH=${PATH}:/Development/android-sdk-macosx/platform-tools:/Development/android-sdk-macosx/tools

Сохраните файл и выйдите из текстового редактора. Запустите ваш.bash_profile, чтобы обновить ваш PATH.

source ~/.bash_profile

Теперь каждый раз, когда вы открываете программу Terminal, в ваш PATH будет включен Android SDK.

Это довольно просто, отредактируйте файл.profile (vi, nano, sublimeText или другой текстовый редактор), вы можете найти его в ~/ directory (user directory) и установить так:

export MY_VAR=[your value here]

пример с Java дома:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

сохраните его и вернитесь в терминал.

Вы можете перезагрузить его с помощью:

source .profileили закройте / откройте окно терминала.

Для однопользовательской модификации используйте ~/.profile из тех, что вы перечислили. Следующая ссылка объясняет, когда различные файлы читаются Bash.

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

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

В дополнение к предлагаемым подходам следует отметить, что в OS X 10.5 (Leopard), по крайней мере, переменные, установленные в launchd.conf будут объединены с настройками, сделанными в .profile, Я полагаю, что это может быть действительно для настроек в ~/.MacOSX/environment.plist тоже, но я не проверял.

Войти Оболочки

/etc/profile

Сначала оболочка выполняет команды в / etc / profile. Пользователь, работающий с привилегиями суперпользователя, может настроить этот файл, чтобы установить общесистемные характеристики по умолчанию для пользователей, использующих bash.

.bash_profile 
.bash_login 
.profile

Затем оболочка ищет ~/.bash_profile, ~/.bash_login и ~/.profile (~/ сокращенно для вашего домашнего каталога), в указанном порядке, выполняя команды в первом из этих найденных файлов. Вы можете поместить команды в один из этих файлов, чтобы переопределить значения по умолчанию, установленные в / etc / profile. Оболочка, работающая на виртуальном терминале, не выполняет команды в этих файлах.

.bash_logout

Когда вы выходите из системы, bash выполняет команды в файле ~ /.bash_logout. Этот файл часто содержит команды, которые очищают после сеанса, например, те, которые удаляют временные файлы.

Интерактивные нелогиновые оболочки

/etc/bashrc

Несмотря на то, что bash не вызывается напрямую, многие файлы ~ /.bashrc вызывают / etc / bashrc. Эта настройка позволяет пользователю, работающему с привилегиями root, устанавливать общесистемные характеристики по умолчанию для нелогиновых командных оболочек.

.bashrc

Интерактивная нелогинная оболочка выполняет команды в файле ~ /.bashrc. Как правило, файл запуска для оболочки входа в систему, такой как.bash_profile, запускает этот файл, поэтому команды входа в систему и nonlogin запускают команды в.bashrc.

Поскольку команды в.bashrc могут выполняться много раз, и поскольку подоболочки наследуют экспортированные переменные, рекомендуется помещать команды, которые добавляют к существующим переменным, в файл.bash_profile.

Здесь есть два типа снарядов.

  • Без логина: .bashrc перезагружается каждый раз, когда вы запускаете новую копию bash
  • Вход в систему:.profile загружается только когда вы входите в систему или явно указываете bash загрузить его и использовать в качестве оболочки входа.

Здесь важно понимать, что в bash.bashrc читается только интерактивной и не входящей в оболочку оболочкой, и вы обнаружите, что люди часто загружают.bashrc в.bash_profile, чтобы преодолеть это ограничение.

Теперь, когда у вас есть базовое понимание, давайте перейдем к тому, как я бы посоветовал вам его настроить.

  • .profile: создать его несуществующим. Поместите вашу настройку PATH туда.
  • .bashrc: создать, если не существует. Поместите туда все свои псевдонимы и пользовательский метод.
  • .bash_profile: создать, если не существует. Поместите следующее там.

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#
Другие вопросы по тегам