W Mountain Lion, jak ustawić w jednym miejscu zmienną środowiskową PATH dla wszystkich nowo uruchamianych aplikacji?

9

Na Ask Different pojawia się wiele pytań dotyczących PATHzmiennej środowiskowej i sposobu ustawiania jej dla aplikacji uruchamianych przez powłokę, reflektor lub przez wyszukiwarkę (typowe pytania: Jak ustawić PATH dla aplikacji uruchamianych przez Finder lub Jak zmienić zmienną środowiskową PATH. .. ).

Odpowiedzi wahają się od shskryptów startowych do /etc/pathscelu /etc/launchd.conf. Oto odpowiedź na ujednolicone ustawienie PATHdla wszystkich aplikacji w systemie Mac OS X Mountain Lion 10.8.2.

halloleo
źródło

Odpowiedzi:

14

Po wielu próbach z różnymi opcjami stwierdzam:

Czy istnieje ujednolicony sposób ustawiania PATHaplikacji uruchamianych na różne sposoby (np. Skrypt powłoki, Finder i Spotlight)? Cóż, tak i nie:

  • Nie : Ustawienie PATHw skryptach uruchamiania powłoki (np. .bashrc) Działa tylko w przypadku aplikacji uruchamianych przez powłoki.
  • Nie : Ustawienie PATHbieżącego launchdprocesu przez launchctl setenv PATH <...>nie działa w ogóle dla mnie.
  • Tak : Ustawienie PATHw /etc/launchd.conf(i ponownym uruchomieniu systemu) sprawi, że właściwe PATHwidoczne w aplikacjach uruchamianych przez Spotlight, Dock i Finder, a następnie (lokalnych) muszli.
  • Nie : Zdalnie wywoływane powłoki nie dziedziczą środowiska. (Zobacz ... dlaczego zdalne powłoki przez ssh NIE dziedziczą środowiska ... )

Uwagi do konfiguracji pocisków:

  1. Dla poprawnego działania w lokalnych powłokach ważne jest, aby wyłączyć użycie /usr/libexec/path_helper, ponieważ domyślne ścieżki w /etc/pathsmogą zmienić kolejność ścieżek w PATH. **

  2. Aby pomieścić zdalne powłoki, musisz ponownie zaimportować launchdśrodowisko do powłoki. Użyj czegoś takiego w swoim .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Niefortunne konsekwencje całego problemu to:

  • Nie ma możliwości, aby te ujednolicone ustawienia dla poszczególnych użytkowników. ( ~/.launchd.confnie działa.)
  • Nie ma łatwego sposobu na zbudowanie ŚCIEŻKI z różnych źródeł przy użyciu technik takich jak rozszerzenie katalogu domowego i in.
halloleo
źródło
Aktualizacja: Ustawianie PATH przez /etc/launch.confnie nie działa dla pocisków zalogować się zdalnie przez ssh (zakładam, ponieważ sshdnie przechodzi jej otoczenie to dziedziczy od swojego rodzica launchddo dziecka powłoki.). - Zredaguję odpowiednio odpowiedź.
halloleo
Odpowiedź zaktualizowana o rozwiązanie dla zdalnych powłok.
halloleo 18.04.13
1
Świetna odpowiedź; Można uprościć pozyskiwania środowiska launchd następująco: eval "$(launchctl export)".
mklement0
Łatwym sposobem edycji /etc/launchd.confjest po prostu uruchomienie sudo -e /etc/launchd.conf(jeśli znasz vi) lub EDITOR=nano sudo -e /etc/launchd.conf(jeśli wolisz edytor niemodalny).
nohillside
3

Rozwijając poprzednią odpowiedź , aby zmienić ścieżkę /etc/launchd.conf, musisz wykonać następujące czynności.

  1. Upewnij się, że masz uprawnienia administratora.

  2. Utwórz nowy plik tekstowy z następującą treścią, zmodyfikowany w zależności od potrzeb:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Zapisz go w swoim katalogu domowym jako launchd.conf.

  4. Otwórz Terminal.app (lub ulubiony zamiennik) i wpisz:

    sudo mv ~/launchd.conf /etc

    W zależności od wcześniejszego użycia sudopolecenia może pojawić się krótki komunikat „ostrożnie rób to, co robisz”, ale w obu przypadkach konieczne będzie podanie hasła. Wszystko, co robi, to przenieść plik do /etckatalogu, który nie jest bezpośrednio dostępny na przykład podczas zapisywania pliku w TextEdit. sudo(skrót „Super User DO”) jest używany, ponieważ do zapisu w tym katalogu potrzebne są uprawnienia administratora.

  5. Zrestartuj swój komputer.

I powinieneś być gotowy. Powodzenia!

MattDMo
źródło
Dzięki za szczegóły, ale pytanie nie dotyczyło sposobów modyfikacji launchd.conf, ale raczej tego, w jaki sposób wszystkie aplikacje uzyskują tę samą zmienną PATH w ujednolicony sposób.
halloleo
Tak, ale pierwotnie szukałem pytania, próbując dowiedzieć się, jak ustawić PATHdla moich aplikacji GUI, i pomyślałem, że pomogę biednym duszom, które mogą nie wiedzieć, jak wprowadzić zmianę ...
MattDMo
Masz tutaj ważny punkt; nadal uważam, że lepszym rozwiązaniem jest włączenie twoich informacji do odpowiedzi. - Myślę, że ten wątek komentarza staje się meta dyskusją, więc otworzyłem go na meta.stackoverflow as Co zrobić z dodatkową odpowiedzią ...
halloleo
1
w rzeczywistości, czy nie powinno to być na meta.apple.stackexchange.com?
MattDMo,
Rzeczywiście, meta.apple.stackexchange.com byłby właściwym miejscem. Po prostu nie wiedziałem, że istnieje ...
Halloleo,
-2

Możesz spróbować https://github.com/ersiner/osx-env-sync .

Obsługuje aplikacje wiersza polecenia i GUI z jednego źródła . Działa z najnowszą wersją systemu OS X (Yosemite).

Ersin Er
źródło
Który po prostu automatyzuje drugą odpowiedź za pomocą bitu, który według niego nie działa, np. Launchctl setenv PATH <...>
user151019
@ Mark To nie ma nic wspólnego z automatyzacją kroków odpowiedzi tutaj. Ten używa agenta uruchamiania. Proponuję spróbować.
Ersin Er,
Zaakceptowane rozwiązanie również korzysta z launchdsystemu. Twoje rozwiązanie ma te same problemy, co podane w zaakceptowanej odpowiedzi.
halloleo
@halloleo Czy rzeczywiście próbowałeś? A w której wersji OS X?
Ersin Er,