У меня есть общее представление о том, как можно установить $ PATH, но есть ли документация, которая полностью описывает, где Mac OS получает все пути, которые добавляются к $ PATH? Я знаю о таких вещах, как /etc/profile
, /etc/paths
и /etc/profile.d
, но есть ли другие сценарии, которые в конечном итоге влияют на значение $ PATH? Я также не очень хорошо знаком между не-логином и оболочкой ( .bashrc
- .bash_profile
), но я знаю об основных различиях.
/etc/profile
скрипт в основном используется bash? У меня нет опыта работы с другими оболочками, но я предполагаю, что они следуют другой структуре?/etc/profile
Используется большинством (все? Не 100% уверен) оболочек. Вот почему это хороший выбор, чтобы поместить вещи, которые вы хотите везде, например, PATH. Bash читает.bash_
файлы, в то время как Zsh, например, читает.zshrc
в дополнение к другим. Это зависит от оболочки.path_helper
вызывается для интерактивных не входящих в систему оболочек (и неинтерактивных оболочек). На самом деле он вызывается для интерактивных оболочек входа в систему ./etc/profile
Пути в
/etc/paths
и ,/etc/paths.d/*
как правило , добавляют кPATH
по path_helper .path_helper
запускается из/etc/profile
, поэтому он запускается, когда bash вызывается как интерактивная оболочка входа в систему, но не когда bash вызывается как оболочка без входа в систему или неинтерактивная оболочка./etc/paths
содержит/usr/local/bin
в конце по умолчанию, и/etc/paths.d/
по умолчанию пусто.Terminal и iTerm 2 по умолчанию открывают новые оболочки в качестве оболочек входа в систему, и оболочка, открываемая при подключении к компьютеру по ssh, также является оболочкой входа в систему. Многие эмуляторы терминалов на других платформах
tmux
и режим оболочки в Emacs открывают новые оболочки как оболочки без входа в систему.Я добавил эту строку в
/etc/launchd.conf
:setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
Это меняет значение
PATH
корневого процесса launchd. Значение наследуется всеми другими процессами, включая процессы запуска на уровне пользователя. Вы можете применить изменения/etc/launchd.conf
, перезапустив или запустивlaunchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
и перезапустив процессы.На OS X
~/.profile
не читается, когда вы входите в систему графически. Если и то~/.bash_profile
и другое~/.profile
существует, bash тоже не читает~/.profile
.~/.MacOSX/environment.plist
перестал работать в 10.8.источник