Установка переменных среды на OS X
Каков правильный способ изменения переменных среды, таких как PATH в OS X?
Я немного искал Google и нашел три разных файла для редактирования:
- /и т.д./дорожки
- ~/.profile
- ~/.tcshrc
У меня даже нет некоторых из этих файлов, и я уверен, что.tcshrc ошибается, поскольку OS X теперь использует bash. Где эти переменные, особенно PATH, определены?
Я запускаю OS X v10.5 (Leopard).
Ответы
Ответ 1
Бруно на верном пути. Я провел обширные исследования, и если вы хотите установить переменные, которые доступны во всех приложениях с графическим интерфейсом, единственный вариант - /etc/launchd.conf
.
Обратите внимание, что environment.plist не работает для приложений, запущенных через Spotlight. Это задокументировано Стивом Секстоном здесь.
-
Откройте окно терминала
-
Введите sudo vi/etc/launchd.conf
(примечание: этот файл может еще не существовать)
-
Поместите в файл следующее содержимое
# 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://stackoverflow.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
-
Сохраните изменения в vi и перезагрузите Mac. Или используйте команду grep
/ xargs
которая показана в комментарии к коду выше.
-
Докажите, что ваши переменные работают, открыв окно терминала и введя команду export
и вы должны увидеть новые переменные. Они также будут доступны в IntelliJ IDEA и других приложениях с графическим интерфейсом, которые вы запускаете через Spotlight.
Ответ 2
Как настроить среду для новых процессов, запущенных Spotlight (без перезагрузки)
С помощью launchctl setenv
вы можете установить среду, используемую startd (и, в дополнение, все, что началось в Spotlight). Например, чтобы установить путь:
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
для bash или zsh.
Как сохранить изменения после перезагрузки
Чтобы сохранить изменения после перезагрузки, вы можете установить переменные среды из /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
.
Ответ 3
До и вплоть до OS X v10.7 (Lion) вы можете установить их в:
~/.MacOSX/environment.plist
Видеть:
Для PATH в терминале вы должны быть в состоянии установить в .bash_profile
или .profile
(вам, вероятно, придется создать его, хотя)
Для OS X v10.8 (Mountain Lion) и за его пределами вам нужно использовать launchd
и launchctl
.
Ответ 4
Решение как для командной строки, так и для приложений с графическим интерфейсом из одного источника (работает с Mac OS X 10.10 (Yosemite) и Mac OS X 10.11 (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...
команды 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).
Ответ 5
-
Делать:
vim ~/.bash_profile
Файл может не существовать (если нет, вы можете просто создать его).
-
Введите это и сохраните файл:
export PATH=$PATH:YOUR_PATH_HERE
-
Бежать
source ~/.bash_profile
Ответ 6
Существует две проблемы, которые необходимо решить при работе с переменными окружения в OS X. Первый - это вызов программ из Spotlight (значок увеличительного стекла в правой части меню Mac/строка состояния), а второй при вызове программ из Dock, Вызов программ из приложения/утилиты терминала является тривиальным, поскольку он считывает среду из стандартных расположений оболочки (~/.profile
, ~/.bash_profile
, ~/.bashrc
и т.д.).
При вызове программ из Dock используйте ~/.MacOSX/environment.plist
где элемент <dict>
содержит последовательность элементов <key>KEY</key><string>theValue</string>
.
При вызове программ из Spotlight убедитесь, что setupd был настроен со всеми требуемыми параметрами ключа/значения.
Чтобы решить обе проблемы одновременно, я использую элемент входа (установленный с помощью инструмента "Системные настройки") в моей учетной записи пользователя. Элемент входа - это сценарий bash, который вызывает функцию Emacs lisp, хотя, конечно, можно использовать свой любимый скриптовый инструмент, чтобы выполнить одно и то же. Этот подход имеет дополнительное преимущество, что он работает в любое время и не требует перезагрузки, т.е. Можно редактировать файл ~/.profile
, запустить элемент входа в какой-либо оболочке и иметь изменения, видимые для вновь вызываемых программ, либо из Dock, либо из Прожектор.
Детали:
Элемент входа: ~/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 ) в отдельный скрипт.
Ответ 7
Другим бесплатным открытым исходным кодом Mac OS X v10.8 (Mountain Lion) Pane/environment.plist Preference является EnvPane.
Исходный код EnvPane доступен на GitHub. Похоже, что EnvPane имеет сравнимые возможности с RCEnvironment, однако, похоже, он может мгновенно обновлять свои сохраненные переменные, то есть без необходимости перезапуска или входа в систему, что приветствуется.
Как заявлено разработчиком:
EnvPane - это панель настроек для Mac OS X 10.8 (Mountain Lion), которая позволяет вам устанавливать переменные среды для всех программ как в графическом, так и в терминальном сеансах. Он не только восстанавливает поддержку ~/.MacOSX/environment.plist в Mountain Lion, но и немедленно публикует ваши изменения в среде без необходимости выхода и повторного входа. <SNIP> EnvPane включает (и автоматически устанавливает) a Агент launchd, который запускается 1) рано после входа в систему и 2) всякий раз, когда изменяется ~/.MacOSX/environment.plist. Агент читает ~/.MacOSX/environment.plist и экспортирует переменные среды из этого файла в текущий экземпляр launchd пользователя через тот же API, который используется launchctl setenv и launchctl unsetenv.
Отказ от ответственности: я никоим образом не связан с разработчиком или его/ее проектом.
PS Мне нравится название (звучит как 'Ends Pain').
Ответ 8
На Mountain Lion все редактирование /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/[email protected]/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: Конечно, вы должны настроить запись пути в соответствии с вашими потребностями.
Ответ 9
В то время как ответы здесь не являются "неправильными", я добавлю другое: никогда не изменяйте переменные среды в OS X, которые влияют на "все процессы" или даже вне оболочки, для всех процессов, выполняемых интерактивно с помощью заданного пользователь.
По моему опыту, глобальные изменения переменных среды, таких как PATH для всех процессов, с большей вероятностью нарушают работу OS X, чем в Windows. Причина в том, что множество приложений OS X и другого программного обеспечения (включая, возможно, особенно компоненты самой ОС) полагаются на инструменты командной строки UNIX под капотом и предполагают поведение версий этих инструментов, предоставляемых системой, и при этом не обязательно использовать абсолютные пути (похожие комментарии относятся к динамически загружаемым библиотекам и переменным среды DYLD_ *). Рассмотрим, например, что ответы с наивысшим рейтингом на различные вопросы о замене версий интерпретаторов, таких как Python и Ruby, выпущенных OS X, обычно говорят "не делайте этого".
OS X действительно не отличается от других UNIX-подобных операционных систем (например, Linux, FreeBSD и Solaris) в этом отношении; наиболее вероятная причина, по которой Apple не обеспечивает простой способ сделать это, состоит в том, что она ломает ситуацию. В той степени, в которой Windows не так подвержена этим проблемам, это связано с двумя вещами: (1) программное обеспечение Windows не склонно полагаться на средства командной строки в той мере, в какой это делает программное обеспечение UNIX, и (2) Microsoft такая обширная история как "DLL-ад", так и проблемы с безопасностью, вызванные изменениями, которые влияют на все процессы, что они изменили поведение динамической загрузки в новых версиях Windows, чтобы ограничить влияние "глобальных" параметров конфигурации, таких как PATH.
"Lame" или нет, у вас будет гораздо более стабильная система, если вы ограничите такие изменения меньшими областями.
Ответ 10
Иногда все предыдущие ответы просто не работают. Если вы хотите иметь доступ к системной переменной (например, M2_HOME
) в Eclipse или IntelliJ IDEA, единственное, что работает для меня в этом случае:
Сначала (шаг 1) отредактируйте /etc/launchd.conf
чтобы он содержал /etc/launchd.conf
строку: "setenv VAR value", а затем (шаг 2) перезагрузитесь.
Простое изменение.bash_profile не будет работать, потому что в OS X приложения не запускаются, как в других Unix'ах; они не наследуют исходные переменные оболочки. Все остальные модификации не будут работать по неизвестной мне причине. Может быть, кто-то еще может прояснить это.
Ответ 11
Обновление (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>
Этот параметр задокументирован на странице запуска launchct:
конфигурация системы | значение пользовательского параметра
Устанавливает постоянную конфигурационную информацию для доменов launchd (8). Могут быть настроены только системный домен и пользовательские домены. Местоположение постоянного хранилища является детали реализации, а изменения в этом хранилище должны выполняться только с помощью этой подкоманды. Для внесения изменений в эту подкоманду требуется перезагрузка.
[...]
путь
Устанавливает переменную среды PATH для всех служб в целевом домене в значение строки. Строковое значение должно соответствовать формату, указанному для Переменная среды PATH в среде (7). Обратите внимание, что если служба указывает свой собственный PATH, переменная среды, специфичная для службы, будет иметь приоритет.
ПРИМЕЧАНИЕ. Это средство не может использоваться для установки общих переменных среды для всех служб в домене. Он намеренно привязан к среде PATH vari- и ничего не по соображениям безопасности.
Я подтвердил это, чтобы работать с приложением GUI, запущенным из Finder (который использует getenv
для получения PATH).
Обратите внимание, что вам нужно сделать это только один раз, и изменение будет постоянным при перезагрузке.
Ответ 12
После преследования панели предпочтений Environment и выяснения, что ссылка сломана, и поиск на сайте Apple, похоже, указывает, что они забыли о это... Я начал возвращаться на след неуловимого процесса запуска.
В моей системе (Mac OS X 10.6.8) оказалось, что переменные, определенные в среде environment.plist, надежно экспортируются в приложения, запущенные из Spotlight (через launchd). Моя проблема в том, что эти вары не экспортируются в новые сеансы bash в терминале. То есть У меня есть противоположная проблема, изображенная здесь.
ПРИМЕЧАНИЕ: environment.plist выглядит как JSON, а не XML, как описано ранее
Я смог получить приложения Spotlight для просмотра vars редактирования ~/MacOSX/environment.plist и
Я смог заставить те же самые vars в новый сеанс терминала, добавив следующее в мой файл .profile:
eval $(launchctl export)
Ответ 13
Любой из загрузочных файлов Bash - ~/.bashrc
, ~/.bash_profile
, ~/.profile
. Там также есть какой-то странный файл с именем ~/.MacOSX/environment.plist
для переменных среды в приложениях с графическим интерфейсом.
Ответ 14
Вот очень простой способ сделать то, что вы хотите. В моем случае это заставляло Gradle работать (для Android Studio).
- Откройте Терминал.
-
Запустите следующую команду:
sudo nano/etc/paths
или sudo vim/etc/paths
-
Введите свой пароль, когда будет предложено.
- Перейдите в конец файла и введите путь, который вы хотите добавить.
- Нажмите Control + X, чтобы выйти.
- Введите "Y", чтобы сохранить измененный буфер.
-
Откройте новое окно терминала и введите:
echo $PATH
Вы должны увидеть новый путь, добавленный в конец PATH.
Я получил эти детали из этого поста:
Добавьте в PATH на Mac OS X 10.8 Mountain Lion и выше
Ответ 15
Как и ответ Matt Curtis, я установил переменные среды через launchctll, но я обернул его в функцию, называемую export, так что всякий раз, когда я экспортирую переменную, как обычно, в мой .bash_profile, она также устанавливается launchctl. Вот что я делаю:
-
Мой .bash_profile состоит только из одной строки (это только личные предпочтения.)
source .bashrc
-
У моего .bashrc есть следующее:
function export()
{
builtin export "[email protected]"
if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
then
launchctl setenv "${@%%=*}" "${@#*=}"
elif [[ ! "${@//[^ ]/}" ]]
then
launchctl setenv "${@}" "${[email protected]}"
fi
}
export -f export
-
Вышеупомянутый будет перегружать Bash встроенный "экспорт" и будет экспортировать все как обычно (вы заметите, что я экспортирую с ним "экспорт"!), а затем правильно настроил их для приложений OS X с помощью launchctll, используете ли вы любое из следующего:
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
-
Таким образом, мне не нужно отправлять каждую переменную в launchctctl каждый раз, и я могу просто настроить мой .bash_profile/.bashrc так, как я хочу. Откройте окно терминала, проверьте переменные среды, которые вас интересуют, с помощью launchctl getenv myVar
, измените что-то в своем .bash_profile/.bashrc, закройте окно терминала и снова откройте его, снова проверьте переменную с помощью launchctl и voilá, он изменился.
-
Опять же, как и другие решения для мира Post-Mountain Lion, для любых новых переменных среды, которые будут доступны для приложений, вам нужно запустить или перезапустить их после изменения.
Ответ 16
Я думаю, что OP ищет простое, похожее на Windows решение.
Ну вот:
http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html
Ответ 17
Чтобы быть кратким и ясным, что каждый файл предназначен для
-
~/.profile
отправляется каждый раз при запуске Terminal.app
-
~/.bashrc
где "традиционно" установлены все экспортные инструкции для среды Bash
-
/etc/paths
является основным файлом в Mac OS, который содержит список путей по умолчанию для создания переменной среды PATH для всех пользователей.
-
/etc/paths.d/
содержит файлы, содержащие дополнительные пути поиска
Нетерминальные программы не наследуют системные переменные PATH и MANPATH, которые делает ваш терминал! Чтобы установить среду для всех процессов, запущенных конкретным пользователем, таким образом, чтобы переменные среды были доступны для приложений Mac OS X GUI, эти переменные должны быть определены в вашем ~/.MacOSX/environment.plist
(Apple Technical Q & A QA1067)
Используйте следующую командную строку для синхронизации environment.plist
с /etc/paths
:
defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
Ответ 18
Переменная $PATH
также зависит от path_helper
, который, в свою очередь, использует файл /etc/paths
и файлы в /etc/paths.d
.
Более подробное описание можно найти в PATH и других проблемах среды в Leopard (2008-11).
Ответ 19
/etc/launchd.conf не используется в OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra) или macOS v10.13 (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.)
Ответ 20
Для одной модификации пользователя используйте ~/.profile
из перечисленных вами. Следующая ссылка объясняет, когда Bash считывает разные файлы.
http://telin.ugent.be/~slippens/drupal/bashrc_and_others
Если вы хотите установить переменную окружения для приложений gui, вам понадобится файл ~/.MacOSX/environment.plist
Ответ 21
Ну, я не уверен в /etc/paths
и ~/.MacOSX/environment.plist
. Они новы.
Но с Bash вы должны знать, что .bashrc
выполняется с каждым новым вызовом оболочки, а .bash_profile
выполняется только один раз при запуске.
Я не знаю, как часто это происходит с Mac OS X. Я думаю, что различие сработало, когда оконная система запускает все.
Лично я устраняю путаницу, создавая файл .bashrc
со всем, что мне нужно, а затем выполните:
ln -s .bashrc .bash_profile
Ответ 22
В дополнение к предложенным подходам стоит отметить, что в OS X 10.5 (Leopard), по крайней мере, переменные, установленные в launchd.conf
будут объединены с настройками, выполненными в .profile
. Я полагаю, что это, вероятно, будет действительным для настроек в ~/.MacOSX/environment.plist
, но я еще не проверял.
Ответ 23
Настройте переменную среды 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.
Ответ 24
Это просто:
Измените ~/.profile и поместите свои переменные следующим образом
$vim ~/.profile
В файле put:
MY_ENV_VAR = значение
$echo $MY_ENV_VAR
$value
Ответ 25
Просто сделал это действительно легко и быстро. Сначала создайте ~/.bash_profile из терминала:
touch .bash_profile
затем
open -a TextEdit.app .bash_profile
добавлять
export TOMCAT_HOME=/Library/Tomcat/Home
сохранить документ, и все готово.
Ответ 26
Здесь есть два типа снарядов.
- Без входа в систему:.bashrc перезагружается каждый раз, когда вы запускаете новую копию Bash
- Вход в систему:.profile загружается только тогда, когда вы либо входите в систему, либо явно указываете Bash загрузить его и использовать в качестве оболочки входа.
Здесь важно понимать, что в Bash файл .bashrc
читается только интерактивной и не .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
#
Ответ 27
Войти Оболочки
/etc/profile
Сначала оболочка выполняет команды в файле /etc/profile
. Пользователь, работающий с привилегиями суперпользователя, может настроить этот файл, чтобы установить общесистемные характеристики по умолчанию для пользователей, работающих под управлением Bash.
.bash_profile
.bash_login
.profile
Затем оболочка ищет ~/.bash_profile
, ~/.bash_login
и ~/.profile
(рука ~ / - это short- для вашего домашнего каталога), в указанном порядке, выполняя команды в первом из этих найденных файлов. Вы можете поместить команды в один из этих файлов, чтобы переопределить значения по умолчанию, установленные в /etc/profile
. Оболочка, работающая на виртуальном терминале, не выполняет команды в этих файлах.
.bash_logout
Когда вы выходите из системы, bash выполняет команды в файле ~/.bash_logout
. Этот файл часто содержит команды, которые очищают после сеанса, например, те, которые удаляют временные файлы.
Интерактивные нелогиновые оболочки
/etc/bashrc
Несмотря на то, что bash не вызывается напрямую, многие файлы ~/.bashrc
вызывают /etc/bashrc
. Эта настройка позволяет пользователю, работающему с привилегиями root, устанавливать общесистемные характеристики по умолчанию для нелогиновых командных оболочек.
.bashrc
Интерактивная нелогинная оболочка выполняет команды в файле ~/.bashrc
. Как правило, файл запуска для оболочки входа в систему, такой как .bash_profile
, запускает этот файл, поэтому команды входа в систему и nonlogin запускают команды в .bashrc
.
Поскольку команды в .bashrc
могут выполняться много раз, и поскольку подоболочки наследуют экспортированные переменные, рекомендуется помещать команды, которые добавляют к существующим переменным, в файл .bash_profile
.
Ответ 28
Вся магия на iOS заключается только в использовании source
с файлом, куда вы экспортируете переменные окружения.
Например:
Вы можете создать файл так:
export bim=fooo
export bom=bar
Сохраните этот файл как bimbom.env
и выполните source./bimbom.ev
. Вуаля, у тебя есть переменные среды.
Проверьте их с помощью:
echo $bim
Ответ 29
Для Bash попробуйте добавить переменные среды в файл /etc/profile
, чтобы сделать их доступными для всех пользователей. Не нужно перезагружаться, просто запустите новый сеанс терминала.
Ответ 30
Это довольно просто. Отредактируйте файл .profile
(vi, nano, Sublime Text или другой текстовый редактор). Вы можете найти его в каталоге ~/
(каталог пользователя) и установить так:
export MY_VAR=[your value here]
Пример с домом Java:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/current
Сохраните его и вернитесь в терминал.
Вы можете перезагрузить его с помощью:
source .profile
Или закройте и откройте окно терминала.