Jak zmienić zmienną środowiskową PATH na OS X 10.8 Mountain Lion, która będzie widoczna dla aplikacji GUI? [duplikować]

14

To pytanie ma już odpowiedź tutaj:

Próbowałem wszystkich metod, o których słyszałem, do ustawiania zmiennych środowiskowych w systemie OS X 10.8, ale żadna z nich nie działa.

Aby przetestować, uruchom skrypt bash z aplikacji GUI, takich jak Eclipse lub IntelliJ IDEA.

#!/bin/bash
set|grep PATH

Rzeczy, które przetestowałem i które nie działają nawet po ponownym uruchomieniu:

  • /etc/paths i /etc/paths.d/something
  • /etc/launchd.conf
  • ~/.bash_profile
  • ~/.MacOSX/environment.plist (binarny plist wykonany zgodnie z zaleceniami)
  • działający launchctl setenv PATH $PATHz wiersza poleceń miał to aktualizować ŚCIEŻKĘ dla aplikacji GUI, przynajmniej dla bieżącej sesji. Zgadnij co, bez zmian.

Wygląda na to, że PATH jest zawsze PATH=/usr/bin:/bin:/usr/sbin:/sbindla aplikacji GUI.

sorin
źródło
Czy jesteś w porządku z rozwiązaniem, które ustawia ścieżkę bash, czy naprawdę potrzebujesz zmienić wartość uruchomionej ścieżki podstawowej dla wszystkich procesów?
bmike
Muszę zmienić ŚCIEŻKĘ używaną przez aplikacje GUI, dla terminalu / bash / ... Mam już duży zestaw działających rozwiązań.
sorin
Nie wiem, dlaczego środowisko Eclipse i inne nie obsługują tylko zmiennych środowiska wykonawczego, więc każdy programista Java na Macu nie musi się martwić o ustawienie ścieżki lub pozyskiwania pożądanych zmiennych w każdym projekcie.
bmike
odpowiedź patrz tutaj: apple.stackexchange.com/questions/51677/…
Flori

Odpowiedzi:

8

W Mountain Lion /etc/launchd.confto miejsce, w którym należy ustawić ścieżkę aplikacji GUI. Pamiętaj, że to nie jest plik skryptu; obsługuje tylko launchctlpolecenia, więc powinieneś napisać coś takiego:

setenv PATH /new/path:/usr/bin:/bin:/usr/sbin:/sbin

Zauważ też, że nie obsługuje on podstawiania zmiennych środowiskowych powłoki (jak $PATH), więc będziesz musiał ustawić każdą ścieżkę, którą chcesz dołączyć. Warto zachować oryginalne ścieżki, o których wspomniałeś ( /usr/bin:/bin:/usr/sbin:/sbin).

Będziesz musiał ponownie uruchomić komputer po zmianie (lub utworzeniu) pliku, aby zmiany odniosły skutek.

João Campos
źródło
To działało dla mnie w 10.8.2 dla ustawienia ŚCIEŻKI, która była możliwa do użycia z Keyboard Maestro.
TJ Luoma,
Strona podręcznika mówi, że możesz użyć $ HOME / .launchd.conf, ale to nie działało dla mnie. Używanie /etc/launchd.conf zrobiło to. Jestem na 10.8.4
Pedz
Dla mnie to nie działa:-bash: setenv: command not found
Colas,
Jeśli ktoś był zdezorientowany jak Colas, setenvto launchctlpolecenie, więc używaj go jak launchctl setenv.
Jon Shier
3

Działa, jeśli wywołasz aplikację GUI z terminalu:

PATH=/this/is/kind/of/crazy:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /Applications/Automator.app/Contents/MacOS/Automator 

wprowadź opis zdjęcia tutaj

Niezbyt przyjemne lub wygodne, ale w razie potrzeby działa.

nohillside
źródło
Wkrótce BRAK SPOSOBU. Nie chcę tego robić, to będzie działać tylko czasami. Aplikację można również uruchomić po kliknięciu pliku.
sorin
2
Jak powiedziałem, nie jest to naprawdę miłe, ale może działać, dopóki Apple nie naprawi problemu (ponieważ powinno to być możliwe w przypadku uruchomienia).
nohillside
2

Przygotowałem inne rozwiązanie, zainspirowane jednym z rozwiązań Patrix , które, mam nadzieję, jest nieco mniej bolesne. Otwórz Automator, wybierz aplikację jako cel i wybierz Execute Shell script(lub jak to się nazywa, w języku niemieckim jest to „Shell-Skript ausführen”, jak widać powyżej) jako działanie. W skrypcie wystarczy wpisać

launchctl setenv FOO1 bar1
[...]
launchctl setenv FOOn barn
open -a YourApplicationHere

Następnie zapisz wszystko, gdzie chcesz, a jeśli chcesz uruchomić YourApplication , otwórz utworzoną „aplikację automatyzującą”.

Przetestowałem to Terminaljako YourApplicationHere i zobaczyłem, launchctl exportże FOO rzeczywiście był ustawiony na bar . Mam nadzieję, że zadziała to także dla innych.

Wreszcie, jeśli użyjesz tego rozwiązania dla zmiennych środowiskowych, zamiast wpisywać launchctlrzeczy w skrypcie powłoki, możesz po prostu wywołać /Users/Shared/conflaunchd.sh(co musisz najpierw wymyślić, wraz z plikiem opisującym zmienne).

Percival Ulisses
źródło
-1

Podobno launchctlzapewnia PATHaplikacje GUI. Aby ustawić ścieżkę do ścieżki powłoki, po ustawieniu ścieżki dodaj do pliku rc powłoki:

launchctl setenv PATH $PATH
ismail
źródło
1
Niestety to nie działa :-(
nohillside
Pozwalamy na odpowiedzi, które podejmowane są w dobrej wierze, aby odpowiedzieć na pytanie. Dopuszczamy nawet błędne odpowiedzi i pozwalamy głosowaniu mówić za poprawnością. Komentowanie bez personalizacji jest najlepszym sposobem na wywiercenie dziury w błędnym argumencie, zamiast zniechęcać do prób odpowiedzi.
bmike