В Mountain Lion, как мне установить, в одном месте, переменную среды PATH для всех недавно запущенных приложений?


9

В Ask Different есть много вопросов, касающихся 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к ребенку оболочке.). - Я отредактирую ответ соответственно.
Привет,

Ответ дополнен решением для удаленных оболочек.
Привет,

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 единым способом.
Привет,

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

У вас есть действительный пункт здесь; Тем не менее, я думаю, что интеграция вашей информации в ответ является лучшим вариантом. - Я думаю, что этот поток комментариев становится мета-обсуждением, поэтому я открыл его на meta.stackoverflow как Что делать с дополнительным ответом ...
halloleo

1
на самом деле, не должно ли это быть на meta.apple.stackexchange.com?
MattDMo

Действительно, meta.apple.stackexchange.com был бы правильным местом. Я просто не знал, что это существует ...
Halloleo

-2

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

Он обрабатывает приложения командной строки и графического интерфейса из одного источника . И это работает с последней версией OS X (Yosemite).


Который просто автоматизирует другой ответ, используя бит, который, как он говорит, не работает, например launchctl setenv PATH <...>
user151019

@Mark Это не имеет ничего общего с автоматизацией шагов ответа здесь. Этот использует Launch Agent. Я предлагаю вам попробовать.
Эрсин Эр

Принятое решение также использует launchdсистему. Ваше решение имеет те же проблемы, что указаны в принятом ответе.
Halloleo

@halloleo Вы действительно пробовали это? И на какой версии OS X?
Эрсин Эр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.