Jak ustawić PATH dla aplikacji uruchomionych w Finderze

70

Aplikacje uruchomione przez Finder wydają się nie respektować ŚCIEŻKI ustawionej w .bash_profile. Więc kiedy próbuję uruchomić kod z IDE (Intellij), nie mam już dostępu do programów w /usr/local/bin, które zwykle są dodawane do mojej ścieżki w Terminalu.

Najwyraźniej .MacOSX/environment.plist kiedyś tak było, ale nie działa już w Lionie.

Jak mogę ustawić PATHaplikacje uruchamiane przez Finder?

Śpiączka kofeinowa
źródło
Czy jesteś pewien, że zaakceptowane rozwiązanie działa z wersją 10.8?
sorin,
1
@SorinSbarnea (wiem, że to jest stare, ale) mogę zweryfikować, że obecnie zaakceptowana odpowiedź działa dla mnie w systemie OS X 10.8.3, gdy używam również sugerowanego hakowania restartu stacji dokującej . ( $PATH
Ustawiam
patrz także < stackoverflow.com/questions/829749/… >. To prawie duplikat.
Philipp Kunz

Odpowiedzi:

38

Jeśli korzystasz z wersji 10.7, a nie 10.8, poniższe rozwiązanie działa dobrze:

Miałem ten sam problem z zaćmieniem, ale teraz dodałem np. Następujące, .bash_profilea potem zadziałało.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Jeśli chcesz pozostawić oryginalną ścieżkę nienaruszoną, użyj

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

zamiast (lub po prostu launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Uwaga: Zmiana PATH launchctl nie będzie obowiązywać, dopóki Dock nie zostanie „zrestartowany”. Nowy proces dokowania rozpocznie się automatycznie po zabiciu bieżącego za pomocą polecenia:

killall Dock
Rene Larsen
źródło
1
Skończyło się na użyciu: „launchctl setenv PATH $ PATH”. Dołączenie istniejącej ścieżki launchctl przez „$ p” kończy się powtarzaniem ścieżki za każdym razem, gdy otwierasz powłokę.
Caffeine Coma
4
To nie działa na OS X 10.8 - wypróbowany z Eclipse i IntelliJ - uruchamianie się set|grep PATHz nich zawsze powróciPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin
1
Nie działa w moim przypadku (10.8.1)
nohillside
4
Można spróbować ponownego uruchamiania stacji dokującej po uruchomieniu launchctl: osascript -e 'tell app "Dock" to quit'. To wydawało mi się, że to naprawiło.
Ivan Andrus,
2
Działa to dla mnie w 10.12, ale tylko raz. Po ponownym uruchomieniu maszyny efekty są tracone.
Dover8
19

Aby odpowiedzieć na twoje pytanie dotyczące „nowego” problemu, postanowiłem napisać inną odpowiedź - ponieważ łatwiej jest to wyjaśnić za pomocą próbek.

Jednym ze sposobów ładowania zmiennych środowiskowych przy uruchamianiu wybranego narzędzia (IDE) jest to, że można to zrobić za pomocą Eclipse - myślę, że w twoim narzędziu (IDE) musi istnieć podobna struktura.

Jak można to zrobić w środowisku Eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(nieco przepisany na temat zmiennych środowiskowych)

Utwórz pusty plik tekstowy o nazwie „eclipse.sh” w katalogu pakietu aplikacji Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Otwórz eclipse.sh w edytorze tekstu i wprowadź następującą zawartość:

#!/bin/sh

. ~/.bash_profile

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

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

W terminalu ustaw flagę wykonywalną skryptu powłoki eclipse.sh, tj .:

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

Otwórz Eclipse.app Info.plist i zmień wartość klucza CFBundleExecutable z eclipse na eclipse.sh.

MacOS X nie wykrywa automatycznie zmiany Info.plist w Eclipse.app. Dlatego musisz wymusić aktualizację bazy danych LaunchService w terminalu za pomocą polecenia lsregister:

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

Przy następnym uruchomieniu Eclipse.app z Docka lub Findera należy ustawić zmienne środowiskowe.

Rene Larsen
źródło
+1 za jasne i dokładne wyjaśnienie oraz fakt, że ponad sześć lat później nadal działa z High Sierra, 10.13.x.
dgnuff
16

W systemie OS X 10.10 Yosemite użyłem tego polecenia:

sudo launchctl config user path <my path setting>

Pamiętaj, że ustawia on PATH launchtl dla wszystkich użytkowników . Działa to dobrze w moim przypadku użycia. Pamiętaj, że zostaniesz poproszony o ponowne uruchomienie komputera, aby efekty mogły zostać wstrzymane.

brki
źródło
Wydaje się, że nie ma to wpływu na zmienną środowiskową PATH aplikacji, które są ponownie otwierane przy logowaniu (które były otwarte podczas zamykania).
Brecht Machiels
4
Ta odpowiedź zadziałała dla mnie. W szczególności, aby uzyskać dostęp do pliku wykonywalnego zarządzanego przez Brew, musiałem się sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinzrestartować.
JP
To najlepsza odpowiedź tutaj na dodanie / usr / local / bin dla aplikacji opartych na Homebrew. Ludzie, zagłosujcie na tę odpowiedź! Działa również w 10.11 i 10.12 (sam nie testowałem w 10.13). environment.plistW większości przypadków nie trzeba się bawić .
Mark Edington,
to zadziałało dla mnie, podczas gdy zaakceptowana odpowiedź nie
MichaelChirico
11

Na Mountain Lion wszystko /etc/pathsi /etc/launchd.confedycja nie ma żadnego efektu!

Fora programistów Apple mówią:

„Zmień Info.plist samej aplikacji., Aby zawierała słownik„ LSEnvironment ”ze zmiennymi środowiskowymi, które chcesz.

~ / .MacOSX / environment.plist nie jest już obsługiwany. ”

Więc bezpośrednio edytowałem aplikację Info.plist(kliknij prawym przyciskiem „AppName.app” (w tym przypadku SourceTree), a następnie „ Show package contents”)

Pokaż Zawartość opakowania

i dodał nową parę klucz / dykt o nazwie:

<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>

(patrz: Dokumentacja LaunchServicesKeys w Apple )

wprowadź opis zdjęcia tutaj

teraz aplikacja (w moim przypadku SourceTree) korzysta z podanej ścieżki i działa z git 1.9.3 :-)

PS: Oczywiście musisz dostosować wpis Ścieżki do swoich specyficznych potrzeb.

Flori
źródło
Czy to prawda? Widzę wiele postów ze sprzecznymi informacjami, niektóre z nich są wyraźnie stare, ale niektóre wydają się nowe. /etc/launchd.confZresztą nawet nie mam (10.8.2) . Można przypuszczać, że nawet jeśli przepisy nie stwierdzają, że aplikacje powinny wykorzystywać swoje Info.plist plików ścieżek, mogli nadal używać innych plików - /etc/launchd.conf, /etc/paths/lub /etc/paths.d/*, lub `~ / .MacOSX / environment.plist. Czy można zatem powiedzieć, że w praktyce ścieżki dla aplikacji GUI w Mountain Lion można ustawić w dowolnym z tych plików?
orome
2
Ta Info.plist była jedyną rzeczą, która działała dla mnie, po wypróbowaniu lauchd.conf, etc / paths itp. Z moją Maverics i zaćmieniem. Właściwie to również nie zadziałało natychmiast, musisz pamiętać o dwóch rzeczach: 1. uruchomić /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appjak podano w innej odpowiedzi, po zmianie plist i 2. dodać pełną ścieżkę , nie możesz użyć istniejącej ŚCIEŻKI, jak w skryptach profilu.
JaakL
Działa to w Sierra (10.12). Ale nadal konieczne jest uruchomienie lsregisterpolecenia, jak zauważył @JaakL.
Alastair Harrison
1

Na Mountain Lion (10.8.4) $PATHjest traktowany w jakiś sposób. launchctl setenv PATH /your/path:/herenie ma żadnego wpływu na $PATHinstancje w Terminal.app lub Emacs.app uruchomione następnie z Docka lub Findera (podczas gdy launchctl setenv SPONG foodziała dobrze). Też $HOME/.launchd.confnie działa. /etc/launchd.confto jedyny sposób, w jaki znalazłem, aby wszędzie ustawiać PATH poprawnie. Niestety, nie można używać envarów takich jak $HOMEtam, więc wszyscy użytkownicy mojego laptopa mają /Users/nb/binje $PATH. To tylko ja, więc mnie to nie obchodzi.

Nick Barnes
źródło
Powinieneś zauważyć, że proces Terminal odbiera ustawioną PATHwartość, ale: kiedy tworzysz nowy terminal, uruchamia powłokę logowania, która - jeśli używasz bash - wykonuje się /etc/profile, co inicjuje PATHsię do wartości zwróconej /usr/libexec/path_helper. Jeśli wybierzesz Powłoka> Nowe polecenie… i uruchomisz env(nie w powłoce), powinieneś znaleźć tę PATHwartość, którą ustawiłeś poprzez uruchomienie.
Chris Page
-1

Spróbuj ustawić ścieżkę w ~ / .profile lub ~ / .bash_profile lub ~ / .zprofile (dla zsh). Działa to dla mnie z VimR - nie czytał ŚCIEŻKI po uruchomieniu z doku, ale działał po uruchomieniu z terminala. Nawiasem mówiąc, działałem na OSX 10.11.

Nie mam wystarczającej wiedzy na ten temat, aby dać ci dobre wyjaśnienie, dlaczego to działa, istnieje wiele wyjaśnień online na temat różnych plików konfiguracyjnych i ich działania: https://stackoverflow.com/questions/415403/ whats-the-różnica-między-bashrc-bash-profile-and-environment

Zobacz także podobną dyskusję tutaj: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893

adampasz
źródło
Pytanie brzmi, jak to zrobić w przypadku aplikacji uruchomionych z Doc, co jest tym samym, co uruchomienie z Findera, dla którego, jak twierdzisz, twoja odpowiedź nie działa - i możemy dokładnie wyjaśnić, dlaczego to działa / nie działa
użytkownik151019
-3

W systemie Mac OS X 10.8.4 Mountain Lion środowisko ścieżki zawiera ścieżki wymienione w tym pliku:

/etc/paths

Możesz edytować ten plik za pomocą narzędzia wiersza poleceń, takiego jak vimnastępujące polecenie:

sudo vim /etc/paths
użytkownik1814739
źródło