Встановлення загальносистемної змінної середовища PATH в Mavericks


41

У попередніх версіях ОС можна встановити загальносистемну змінну середовища PATH, /etc/launchd.confщоб вона була доступною для всіх додатків (не лише командного рядка).

У Mavericks це, здається, більше не використовується.

Чи є інша техніка цього в мавериках?

Відповіді:


51

Йосеміт

/etc/launchd.confбільше не підтримується в 10.10. Дивіться man launchctl:

Файл /etc/launchd.conf більше не консультується щодо підкоманд, які запускаються під час раннього завантаження; цю функціональність було видалено з міркувань безпеки.

Тепер ви можете, наприклад, зберегти цей список у вигляді ~/Library/LaunchAgents/my.startup.plist:

<?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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

launchctl setenvКоманда RAN як користувач, так що це відноситься тільки до процесів , запущеним в домені користувача.

Цей метод не застосовується до програм, які повторно відкриваються під час входу, якщо встановлено прапорець "Повторно відкрити вікна при вході в систему".

Маверики і раніше

Наприклад, у версії 10.9 та новіших версіях ви можете запустити

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

а потім перезапустіть, щоб застосувати зміни.

Інші методи

/etc/pathsі /etc/paths.d/застосовувати тільки (або головним чином) до раковин. Лінії /etc/pathsі /etc/paths.d/*додаються до шляху з допомогою path_helper , яка запускається з /etc/profile, /etc/zshenv, і /etc/csh.login. Я не знаю жодної програми, крім оболонок, яка б розглядала /etc/pathsабо /etc/paths.d/.

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


2
Так; він просто не існує за замовчуванням, але його створення та встановлення правильних записів допомагає
mgol

У Yosemite я виявив, що деякі програми, здається, не бачать PYTHONPATH, яку я встановив у /etc/launchd.conf, і я використав ваше виправлення командного рядка (другий абзац у вашій відповіді), і, здається, це не працює , це просто дає мені startctl повідомлення про помилку / допомогу.
Танго

@Tango я відредагував відповідь. /etc/launchd.confбуло видалено 10.10.
Лрі

Додам, що мій досвід, граючи з башем, полягає в тому, що, 10.10, запуск startctl setenv, здається, нічого не робить. Я спробував встановити env-змінні, потім перевірив значення з відлунням, і вони все ще не визначені.
Танго

1
@Tango Запустіть і знову відкрийте свою термінальну програму після запуску launchctl setenv. launchctl setenvніколи не впливав на існуючі процеси.
Лрі

11

Є набагато простіший спосіб. Помістіть текстовий файл у папку /etc/paths.d/. У цей текстовий файл введіть потрібний шлях І новий рядок. Найкращий спосіб - створити новий файл для кожного шляху.

У моїй системі є файл під назвою MySQL з текстом '/ usr / local / mysql / bin' та новим рядком.


Я щойно опублікував нове запитання про те, чи є способи подолати слабкість, описану @LauriRanta.
kuzzooroo

Просто анадот: я використовував і цей метод, оскільки це рекомендований "шлях X X". Я не мав великого шансу отримати систему, щоб послідовно вшановувати файли PATH, які є у /etc/paths.d, і, як правило, або використовую команду експорту оболонки, або розміщуючи свої PATH в ~ / .bash_profile, які завжди працюють, якщо тільки для мого поточного облікового запису користувача, а не для всієї системи. Якщо файли PATH в /etc/paths.d завжди працюють на вас, то я ревную, що ваша система краще веде себе, ніж моя;)
chillin

Цей для мене новий. Приємно!
CousinCocaine

3

Ви можете встановити змінні середовища у файлі /etc/launchd-user.conf...

У Mavericks мені вдалося налаштувати змінну середовища у файлі за допомогою рядка:

setenv TEST test

Після свіжого завантаження встановлюється $TESTз /etc/launchd-user.conf.

Редагувати

Можливо, що синтаксис файлу в /etc/launchd.conf недійсний. Чи можете ви опублікувати вміст цього файлу на експертизу?

З того, що я бачу, встановлення змінної PATH в /etc/launchd.conf працює нормально. Однак розширення параметрівlaunchd не виконує . Тому, якщо у вас є запис типу , ваш результат буде встановлений на " " (зверніть увагу: не значення PATH, а текст "$ PATH")setenv PATH $PATH:/usr/local/bin$PATH:/usr/local/bin


Дякую, проблема, яка у мене виникає, - це встановити PATH, інші змінні середовища, здається, працюють.
Том

@Tom - Я надав додаткову пропозицію вище
Едді Келлі

1
це справді запуск-user.conf чи запуск- [current_user_name] .conf
Shanimal

/etc/launchd.conf, що містить "тест тестування setenv", не поширюється на термінал на моїх Mavericks.
Дейв X

На жаль: s / Mavericks / Yosemite /.
Дейв X

0

на моїй Mavericks встановити, додавши "setenv PATH blablabla" в /etc/launchd.conf не працював після перезавантаження

тому я додав свій новий шлях до кінця / etc / paths, який працював.


Це не працювало для мене. Я перезавантажився, /etc/pathsмістить усе, що я хочу, і все ж Sublime все ще бачить лише оригінальну ПАТУ. Якщо я запускаю його з терміналу, він працює.
мгol

Команда path_helper в моєму / etc / profile використовує / etc / paths та /etc/paths.d, щоб перезаписати будь-який PATH, який міг бути встановлений /etc/launchd.conf
Dave X

0

Я виявив, що setenv PATH все ще працює для мене для терміналів та додатків, але зламався в скриптах оболонки, запускається безпосередньо клацанням або Відкрити в терміналі з, скажімо, Finder. Це дуже дивно. Інші змінні середовища, встановлені в /etc/launchd.confроботі.

Щоб виправити це для скриптів оболонки, запущених безпосередньо, я скопіював налаштування PATH у ~/.bash_profile.


0

Редагування /etc/paths.dчи використання .bash_profileне працювало для мене, проте, як запропонував хтось інший (я насправді прийшов сюди, щоб підтвердити його відповідь, але я не міг його знайти знову ?!), я відредагував, /etc/pathsщо працює для мене

У моєму випадку я додав андроїд-інструмент adbі androidдо термінальних команд із вказівкою на їх шляхи sdk ( adbперемістився в інший каталог сьогодні), які виглядають як

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWEET, додавши, що XML до ~ / Бібліотека / LaunchAgents / setenv.SVN.plist дозволив BBEdit використовувати бінарні файли субверсії, які я встановив у / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
Будь-яка ідея, як визначити, чи підтримує цей файл розширення параметрів? Можливо, я встановив шлях, щоб єдиний вхід / вибір був єдиним. І я думаю, що це, ймовірно, НЕ підтримує використання $ PATH. Як би ви визначили для початку існуючий шлях?
Марк М

-1

Просто додайте свій шлях "bin" (шлях, який ви хочете додати) до файлу / etc / paths - перезавантажте або перейдіть !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

збережіть файл і перегляньте ... сподіваюся, це допоможе

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