Как установить PATH для приложений, запускаемых Finder

70

Приложения, запущенные через Finder, похоже, не учитывают PATH, как указано в .bash_profile. Поэтому, когда я пытаюсь запустить код из IDE (Intellij), у меня больше нет доступа к программам /usr/local/bin, которые обычно добавляются к моему пути в Терминале.

Видимо .MacOSX/environment.plist раньше был способ сделать это, но он больше не работает в Lion.

Как настроить PATHприложения, запускаемые Finder?

Кофеин Кома
источник
Вы уверены, что ваше принятое решение работает на 10.8?
Сорин
1
@SorinSbarnea (я знаю, что это старый, но) я могу проверить, что принятый в настоящее время ответ работает для меня на OS X 10.8.3, когда я также использую предложенный хак перезапуска дока . (Я устанавливаю другую переменную среды, но не $PATHв том случае, если это имеет значение.)
Calrion
см. также < stackoverflow.com/questions/829749/… >. Это в значительной степени дубликат.
Филипп Кунц

Ответы:

38

Если у вас 10,7, а не 10,8, решение ниже работает хорошо:

У меня была та же проблема с затмением, но теперь я добавил, например, следующее к своему, .bash_profileи тогда это сработало.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Если вы хотите оставить исходный путь без изменений, используйте

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

вместо (или просто launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Примечание. Изменение PATH для launchctl не вступит в силу, пока Dock не будет «перезапущен». Новый процесс Dock автоматически запустится после того, как текущий будет убит командой:

killall Dock
Рене Ларсен
источник
1
Я закончил тем, что использовал: "launchctl setenv PATH $ PATH". Добавление существующего пути launchctl через «$ p» в конечном итоге повторяет путь каждый раз, когда вы открываете оболочку.
Кофеин Кома
4
Это не работает на OS X 10.8 - пробовал с Eclipse и IntelliJ - запуск set|grep PATHс них всегда вернетсяPATH=/usr/bin:/bin:/usr/sbin:/sbin
сорин
1
У меня тоже не работает (10.8.1)
nohillside
4
Вы можете попробовать перезагрузить док после запуска launchctl: osascript -e 'tell app "Dock" to quit'. Это, казалось, исправило это для меня.
Иван Андрус
2
Это работает для меня в 10.12, но только как один раз. После перезапуска машины эффекты теряются.
Dover8
19

Чтобы ответить на ваш вопрос о вашей «новой» проблеме, я решил написать другой ответ - потому что это легче объяснить с помощью примеров.

Один из способов загрузки переменных среды при запуске выбранного вами инструмента (IDE) - это то, что это можно сделать с помощью eclipse - я думаю, что в вашем инструменте (IDE) должна быть похожая структура.

Как это можно сделать в Eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(немного переписано о переменных окружения)

Создайте пустой текстовый файл с именем "eclipse.sh" в каталоге пакета приложений Eclipse. /Applications/eclipse/Eclipse.app/Contents/MacOS

Откройте eclipse.sh в текстовом редакторе и введите следующее содержимое:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

В Терминале установите исполняемый флаг сценария оболочки eclipse.sh, т.е.

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

Откройте Eclipse.app Info.plist и измените значение ключа CFBundleExecutable с eclipse на eclipse.sh.

MacOS X не обнаруживает автоматически, что Info.plist Eclipse.app изменился. Поэтому вам необходимо принудительно обновить базу данных LaunchService в Терминале с помощью команды lsregister:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

При следующем запуске Eclipse.app из Dock или из Finder должны быть установлены переменные среды.

Рене Ларсен
источник
+1 за ясное и точное объяснение, а также тот факт, что более шести лет спустя это все еще работает с Высшей Сьеррой, 10.13.х.
dgnuff
16

На OS X 10.10 Yosemite я использовал эту команду:

sudo launchctl config user path <my path setting>

Имейте в виду, что он устанавливает PATH launchtl для всех пользователей . Это хорошо сработало для моего варианта использования. Обратите внимание, что вам будет предложено перезагрузить компьютер, чтобы эффекты вступили в силу.

brki
источник
Это, похоже, не влияет на переменную среды PATH приложений, которые открываются при входе в систему (которые были открыты при завершении работы).
Брехт Мачиэльс
4
Этот ответ работал для меня. В частности, чтобы получить доступ к исполняемому файлу Brew, мне пришлось sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinперезагрузить компьютер.
JP
Это лучший ответ для добавления / usr / local / bin для приложений на основе Homebrew. Люди, пожалуйста, проголосуйте за этот ответ! Он также работает в 10.11 и 10.12 (сам не тестировал в 10.13). Нет необходимости связываться с environment.plistв большинстве случаев.
Марк Эдингтон
это сработало для меня, в то время как принятый ответ не сработал
MichaelChirico
11

На Mountain Lion все /etc/pathsи /etc/launchd.confредактирование не дает никакого эффекта!

Форумы разработчиков Apple говорят:

Msgstr "Измените Info.plist самого .app, чтобы он содержал словарь" LSEnvironment "с необходимыми переменными среды.

~ / .MacOSX / environment.plist больше не поддерживается. "

Поэтому я непосредственно отредактировал приложение Info.plist(щелкните правой кнопкой мыши «AppName.app» (в данном случае SourceTree), а затем « Show package contents»).

Показать содержимое пакета

и добавил новую пару ключ / dict под названием:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(см .: Документация по LaunchServicesKeys в Apple )

введите описание изображения здесь

теперь приложение (в моем случае SourceTree) использует указанный путь и работает с git 1.9.3 :-)

PS: Конечно, вы должны настроить запись пути в соответствии с вашими потребностями.

Флори
источник
Это правда? Я вижу много постов с противоречивой информацией, некоторые из которых явно старые, но некоторые из них кажутся недавними. У меня даже нет (на 10.8.2) в /etc/launchd.confлюбом случае. Предположительно, даже если правила не утверждают , что приложения должны использовать свои Info.plist файлы для путей, они могут по- прежнему использовать другие файлы - /etc/launchd.conf, /etc/paths/или /etc/paths.d/*, или `~ / .MacOSX / environment.plist. Можно ли тогда сказать, что на практике пути для приложений с графическим интерфейсом в Mountain Lion могут быть заданы в любом из этих файлов?
13
2
Этот Info.plist был единственным, что сработало для меня, после попытки lauchd.conf, etc / paths и т. Д. С моими Maverics и eclipse. На самом деле это также не сработало сразу, вам нужно запомнить две вещи: 1. запустить, /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appкак указано в другом ответе, после изменения plist и 2. добавить полный путь туда, вы не можете использовать существующий PATH, как в скриптах вашего профиля.
JaakL
Это работает на Сьерра (10.12). Но все равно необходимо выполнить lsregisterкоманду, как отмечает @JaakL.
Аластер Харрисон
1

На Горного Льва (10.8.4) $PATHлечится как-то специально. launchctl setenv PATH /your/path:/hereне влияет на $PATHэкземпляры в Terminal.app или Emacs.app, которые впоследствии запускаются из Dock или из Finder (тогда как launchctl setenv SPONG fooработает нормально). Также $HOME/.launchd.confне работает. /etc/launchd.confэто единственный способ, которым я нашел правильную установку PATH везде. К сожалению, нельзя использовать envars, такие как $HOMEтам, поэтому все пользователи на моем ноутбуке имеют /Users/nb/binсвои $PATH. Это только я, поэтому мне все равно.

Ник Барнс
источник
Вы должны обнаружить, что процесс Terminal выбирает PATHзначение, которое вы установили, но: когда вы создаете новый терминал, он запускает оболочку входа в систему, которая - если вы используете bash - выполняет /etc/profile, которая инициализируется PATHзначением, возвращаемым из /usr/libexec/path_helper. Если вы выберете Shell> New Command… и запустите env(не в оболочке), вы должны найти PATHзначение, которое вы задали с помощью launchd.
Крис Пейдж
-1

Попробуйте установить путь в ~ / .profile или ~ / .bash_profile или ~ / .zprofile (для zsh). Это работало для меня с VimR - оно не считывало PATH при запуске из док-станции, но работало при запуске из терминала. Кстати, я работал на OSX 10.11.

У меня недостаточно хороших советов для этого, чтобы дать вам отличное объяснение того, почему это работает, в Интернете есть множество объяснений о различных файлах конфигурации и их действиях: https://stackoverflow.com/questions/415403/ Что-разностное-между-Bashrc-баш-профили и охрана окружающей среды

Также см. Аналогичное обсуждение здесь: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893

adampasz
источник
Вопрос состоит в том, как это сделать для приложений, запускаемых из Doc, что аналогично запуску из Finder, для которого, как вы говорите, ваш ответ не работает - и мы можем точно объяснить, почему он работает / не работает
user151019
-3

В Mac OS X 10.8.4, Mountain Lion, среда пути включает пути, перечисленные в этом файле:

/etc/paths

Вы можете редактировать этот файл с помощью инструмента командной строки, например, с vimпомощью следующей команды:

sudo vim /etc/paths
user1814739
источник