Як в Mountain Lion я можу встановити в одному місці змінну середовища PATH для всіх нещодавно запущених додатків?


9

У запитанні різних є багато питань щодо PATHзмінної середовища та способів її встановлення для програм, запущених оболонкою, прожектором або за допомогою пошуку (типові питання: як встановити PATH для запущених програм Finder або як змінити змінну середовища PATH. .. ).

Відповіді варіюються від shсценаріїв запуску , щоб /etc/pathsв /etc/launchd.conf. Ось я після відповіді на уніфіковану настройку PATHдля всіх програм під Mac OS X Mountain Lion 10.8.2.

Відповіді:


14

Після багатьох випробувань з різними варіантами я роблю висновок:

Чи існує уніфікований спосіб встановити PATHпрограми, запущені різними способами (як скрипт оболонки, Finder та Spotlight)? Ну так і ні:

  • Ні : Налаштування PATHсценаріїв запуску оболонки (наприклад .bashrc) працює лише для програм, запущених оболонками.
  • Ні : Налаштування PATHдля поточного launchdпроцесу через launchctl setenv PATH <...>мене взагалі не працює.
  • Так : Установка PATHв /etc/launchd.conf(і перезавантаження системи) зроблять відповідне PATHвидиме в додатках , запущених Spotlight, Dock і Finder і згодом (локальні) оболонки.
  • Ні : Оболонки, що віддалено викликаються, не успадковують навколишнє середовище. (Дивіться ... чому віддалені оболонки через ssh НЕ успадковують середовище .. )

Примітки щодо налаштування снарядів:

  1. Для коректного функціонування в локальних оболонках важливо вимкнути використання /usr/libexec/path_helper, оскільки шляхи за замовчуванням у /etc/pathsможе змінити порядок шляхів PATH. **

  2. Для розміщення віддалених оболонок потрібно повторно імпортувати launchdсередовище в оболонку. Використовуйте щось подібне у своєму .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Нещасними наслідками всього питання є:

  • Ні в якому разі немає цих уніфікованих налаштувань на основі кожного користувача. ( ~/.launchd.confне працює.)
  • Непростий спосіб побудувати PATH з різних джерел за допомогою таких методів, як розширення домашнього каталогу та ін.

Оновлення: Установка PATH через /etc/launch.confце НЕ працює для оболонок увійшло в віддалено через SSH (я припускаю , тому що sshdне проходить його оточення , успадковане від батька launchdдо дитини оболонці.). - Відповідь я відредагую відповідно.
halloleo

Відповідь оновлено рішенням для віддалених оболонок.
Халлолео

1
Чудова відповідь; Ви можете спростити сорсинг середовища запуску програм наступним чином : eval "$(launchctl export)".
mklement0

Простий спосіб редагування /etc/launchd.conf- це просто запустити sudo -e /etc/launchd.conf(якщо ви знайомі з vi) або EDITOR=nano sudo -e /etc/launchd.conf(якщо ви віддаєте перевагу немодальний редактор).
nohillside

3

Розширюючи попередню відповідь , щоб змінити шлях /etc/launchd.conf, вам потрібно буде виконати наступне.

  1. Переконайтеся, що у вас є права адміністратора.

  2. Створіть новий текстовий файл із наступним вмістом, змінений відповідно до ваших потреб:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Збережіть його у своєму домашньому каталозі як launchd.conf.

  4. Відкрийте Terminal.app (або ваш улюблений замінник) і введіть:

    sudo mv ~/launchd.conf /etc

    Залежно від попереднього використання sudoкоманди, ви можете отримати коротке повідомлення "будьте обережні, робите те, що ви робите", але в будь-якому випадку вам потрібно буде ввести пароль. Все, що робиться командою, - це перемістити файл у /etcкаталог, який безпосередньо не доступний при збереженні файлу, наприклад, у TextEdit. sudo(скорочено "Super User DO") використовується тому, що для запису в цей каталог потрібні права адміністратора.

  5. Перезавантажте комп'ютер.

І ви повинні бути все налаштовані. Удачі!


Дякую за деталі, але питання полягало не в способах модифікації launchd.conf, а в тому, як усі програми отримують одну і ту ж змінну PATH уніфікованим способом.
halloleo

Правильно, але я спочатку шукав питання, намагаючись розібратися, як встановити PATHдля моїх додатків графічний інтерфейс, і зрозумів, що допоможу тим, хто з бідних душ може не знати, як вплинути на зміни ...
MattDMo

Тут у вас є дійсна точка; все-таки, я думаю, що інтегрування вашої інформації у відповідь є кращим варіантом. - Я думаю, що цей потік коментарів стає мета дискусією, тому я відкрив його на meta.stackoverflow як Що робити з додатковою відповіддю ...
halloleo

1
насправді, чи не повинно це бути на meta.apple.stackexchange.com?
MattDMo

Дійсно, мета.apple.stackexchange.com був би правильним місцем. Я просто не знав, що воно існує ...
halloleo

-2

Ви можете спробувати https://github.com/ersiner/osx-env-sync .

Він обробляє і командний рядок, і програми GUI з одного джерела . І це працює з останньою версією OS X (Yosemite).


Що просто автоматизує іншу відповідь, використовуючи біт, який, за його словами, не працює, наприклад, startctl setenv PATH <...>
user151019

@Mark Це не має нічого спільного з автоматизацією кроків відповіді тут. У цьому використовується агент запуску. Я пропоную спробувати.
Ерсін Ер

Прийняте рішення використовує і launchdсистему. У вашому рішенні є ті ж питання, що й у прийнятій відповіді.
halloleo

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