Як Mac OS X встановлює значення $ PATH?


12

У мене є основне розуміння того, як можна встановити $ PATH, але чи є документація, яка повністю описує, де Mac OS отримує всі шляхи, які додаються до $ PATH? Мені відомо про такі речі, як /etc/profile, /etc/pathsі /etc/profile.d, але чи існують інші сценарії, які з часом впливають на значення $ PATH? Я також не дуже знайомий між не-входом та оболонками входу ( .bashrc, .bash_profile), але я знаю основні відмінності.

Відповіді:


9

Зазвичай ваш PATH встановлюється оболонкою. Для Баша все пояснено в посібнику . Ви також можете відкрити man bashта перейти до INVOCATIONчастини.

Викликається як інтерактивна оболонка для входу, або з --login

Коли Bash викликається як інтерактивна оболонка для входу або як неінтерактивна оболонка з опцією --login, вона спочатку зчитує та виконує команди з файлу / etc / profile, якщо такий файл існує. Прочитавши цей файл, він шукає у цьому порядку ~ / .bash_profile, ~ / .bash_login та ~ / .profile, і зчитує та виконує команди з першого, який існує та читається.

Закликається як інтерактивна оболонка без входу

Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, Bash зчитує та виконує команди з ~ / .bashrc, якщо цей файл існує. В OS X, крім того, є те, path_helperщо читає вміст /etc/paths.dта додає їх до вашого шляху.

Ключовим тут є те, що в OS X термінал за замовчуванням відкриває оболонку входу, тоді як в Linux оболонки зазвичай запускаються як оболонки без входу. Джош Стайгер має чітке пояснення входу в оболонки проти невхідних оболонок .

Отже, є по суті лише ці три три, де можна встановити шляхи:

  • /etc/profile(що дзвонить path_helper)
  • /etc/pathsі /etc/paths.d(дзвонив з path_helper)
  • файл конфігурації оболонки ( .bash_profile)

Дякуємо за стислу та інформативну відповідь. Тож я певно розумію, які сценарії / артефакти впливають на $ PATH тоді. Так це означає, що /etc/profileце сценарій, в основному використовується bash? Я не маю досвіду з іншими снарядами, але я припускаю, що вони відповідають іншій структурі?
Psycho Punch

/etc/profileВикористовується більшістю (все? Чи не 100% впевнений) оболонок. Ось чому це вдалий вибір, щоб вкласти речі, які ви хочете всюди, як ПАТИ. Bash читає .bash_файли, а Zsh, наприклад, читає .zshrcна додаток до інших. Це залежить від оболонки.
slhck

"Додатково в OS X є path_helper, який читає вміст /etc/paths.d і додає їх до вашого шляху." Ні, path_helperце НЕ називається для інтерактивних нерегістріруемих оболонок (ні недіалогових оболонок). Насправді його називають інтерактивними оболонками для входу /etc/profile.
Maggyero

8

Шляхи в /etc/pathsі /etc/paths.d/*, як правило, додаються PATHшляхом path_helper . path_helperзапускається з /etc/profile, тому він запускається, коли bash викликається як інтерактивна оболонка входу, але не тоді, коли bash викликається як оболонка без входу або неінтерактивна оболонка.

/etc/pathsмістить /usr/local/binв кінці за замовчуванням і /etc/paths.d/порожній за замовчуванням.

Термінал та 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процесу запуску кореня. Значення успадковується всіма іншими процесами, включаючи запущені процеси на кожного користувача. Ви можете застосувати зміни до /etc/launchd.confперезавантаження або запуску launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confта перезапуску процесів.

В ОС X ~/.profileне читається під час графічного входу. Якщо і те ~/.bash_profileі інше ~/.profileіснує, баш також не читає ~/.profile.

~/.MacOSX/environment.plist припинив роботу в 10.8.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.