Я прочитал дюжину разных ответов и поговорил с группой людей, и мне трудно понять, как рассчитывается PATH в различных сценариях. Конкретно я думаю о
- Как именно рассчитывается PATH для bash?
- Как именно это рассчитывается для других оболочек? (Я предполагаю, что его оболочка зависит, но что общего между всеми оболочками?)
- Как именно это рассчитывается для приложений с графическим интерфейсом?
- Я пропускаю другой способ запуска вещей? Демоны делают что-то другое? (Я так не думаю? Но может быть ...)
Кроме того, я сейчас в Высшей Сьерре, но я вижу, что некоторые люди упоминали, что это изменилось в какой-то момент?
Я видел этот ответ , и это одно , но оба , кажется , быть сосредоточенным явно на то , что происходит внутри Баш.
macos
terminal
ui
environment-variables
Джордж Мауэр
источник
источник
.bash_profile
для примера, потому что к тому времени, когда он запускается, в PATH уже есть что-то (поэтому мы добавляем его вперед или назад). Он рассчитывается с учетом некоторой последовательности источников и выполнения некоторой последовательности сценариев, но что это такое ?path_helper
для установки переменной PATH. Проверьте его страницу руководства; Вы найдете, что они читают/etc/paths
и/etc/paths.d/*
для содержания. Пользователям других оболочек рекомендуется адаптировать этот метод; таким образом, все оболочки получают одинаковый путь.Ответы:
Я собираюсь объединить 1 и 2, потому что все оболочки читают файлы при запуске.
PATH наследуется от родительского процесса. Это ключевая концепция, которую вам нужно понять.
Сначала PATH жестко запрограммирован в ядре:
launchd, который действует как
init
может быть настроен для изменения этого PATH. Вообще это не изменилось.Loginwindow.app настроит среду при входе в ваш компьютер. PATH проверит, что он установлен или будет задан жестко закодированный путь в ядре или измененный путь, заданный launchd. Это похоже на вызов loginwindow.app
login -pf <username>
.На этом этапе пользователь LaunchAgent или LaunchDaemon может изменить PATH.
Это будет ПУТЬ, доступная для приложений с графическим интерфейсом из Finder. (Ранние версии OS X могли использовать ~ / .MacOSX / environment.plist для изменения PATH для приложений с графическим интерфейсом). Теперь, если это кажется сложным, это не так и, скорее всего, как и я, доступный путь PATH
/usr/bin:/bin:/usr/sbin:/sbin
Когда вы запускаете Terminal.app, он сначала вызывает
login
(login -pf), который запускает вашу оболочку как оболочку входа. Соответствующие файлы в / etc и вашей папке HOME читаются. Теперь PATH должен отличаться от установленного в loginwindow.app. Помните, мы говорили о наследовании? Если вы запустите приложение с графическим интерфейсом пользователя из сеанса терминала, тогда доступный для приложения GUI путь будет таким же, как установленный оболочкой.Что касается демонов, они обычно начинаются по их абсолютному пути.
источник
Со страницы руководства для PATH (
man path
):Итак, из этого, за исключением справочной страницы bash, мы видим, что путь bash (изначально):
Путь можно (очевидно) изменить. Существует несколько мест, где можно установить переменную среды PATH:
~/.bashrc
~/.bash_profile
В macOS файл
/etc/paths
используется для настройки путей поиска:Кроме того, путь изначально настраивается
/usr/libexec/path_helper
утилитой, которая будет создавать путь на основе содержимого/etc/paths.d
Вызывается, из
/etc/profile
которого устанавливается общесистемный профиль bash (индивидуальные задаются~/.profile
)Что касается приложений с графическим интерфейсом, путь оболочки действительно не имеет никакого эффекта. Единственный случай, когда приложение с графическим интерфейсом (Какао, Кварц, Металл) имеет какое-либо отношение к PATH, - это когда он открывает оболочку (интерактивную или неинтерактивную). В этот момент он будет использовать установленную среду PATH или вносить любые необходимые изменения во время выполнения.
Разные снаряды
Каждый из оболочек имеет свой профиль всей системы (как и bash), который устанавливает начальный PATH (вызывая
path_helper
утилиту)/etc/zprilfe
/etc/profile
/etc/csh.login
источник
system attribute PATH
или что-то в AppleScript, верно? Значение, которое я вижу там ... откуда оно? Какую серию шагов прошла ОС, чтобы установить ее?Все: Пожалуйста, поймите, что Apple со временем изменила парадигму Paths в Sierra (см. Https://lluad.com/blog/os-x-system-path/ ), HighSierra и Mojave. Path_helper теперь работает по-другому, кажется, потому что он заблокировал окна терминала для меня, что я могу освободить и работает нормально, комментируя
в
/etc/profile
.У меня есть сценарии, которые исправляют путь, потому что у меня работает несколько инструментов (ядро из них установлено Homebrew, но это только около 15 из 25, которые я использую каждый день), и их нужно настроить для использования в .app приложения, в сценариях запуска .sh и для автозапуска в защищенной последовательности загрузки под Mojave. Это сбивает с толку, но Мохаве наверняка изменил требуемую структуру, и мне нужно усилить ее самостоятельно.
Что это означает для этого конкретного вопроса, так это то, что этот вопрос важен во всей его широте и что на него должны ответить разработчики, которые почувствовали боль и зафиксировали свои системы для Мохаве, а также пришли из различных «миров», как обычные IDE. , XCode, Eclipse, Bean, Intellij и т. Д. Кроме того, те, кто зависят от доморощенных стеков, или стеки mamp, и т. Д. И для тех, кто занимается докером, .node, vm и т. Д., Работают и другие более глубокие инструменты. По мере того, как Apple внедряет большую безопасность, наши вещи ломаются, но я рад, что Apple выполняет свою работу. Мы должны сделать наше, поэтому нам нужны передовые люди, чтобы передать новую мудрость. Статьи, которым 6 и более месяцев, просто смущают нас.
источник