Ustawianie systemowej zmiennej środowiskowej PATH w Mavericks

41

W poprzednich wersjach systemu operacyjnego można było ustawić zmienną środowiskową PATH dla całego systemu, /etc/launchd.confaby była dostępna dla wszystkich aplikacji (nie tylko wiersza poleceń).

W Mavericks wydaje się, że nie jest już używany.

Czy istnieje inna technika robienia tego u indywidualistów?

Tomek
źródło

Odpowiedzi:

50

Yosemite

/etc/launchd.confnie jest już obsługiwany w 10.10. Zobacz man launchctl:

Plik /etc/launchd.conf nie jest już sprawdzany pod kątem komend do uruchomienia podczas wczesnego rozruchu; ta funkcja została usunięta ze względów bezpieczeństwa.

Możesz teraz na przykład zapisać ten plist jako ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

launchctl setenvKomenda jest prowadzony jako użytkownik, a więc stosuje się tylko do procesów uruchomionych w domenie użytkownika.

Ta metoda nie ma zastosowania do aplikacji, które są ponownie otwierane podczas logowania, jeśli zaznaczone jest „Otwórz ponownie okna podczas ponownego logowania”.

Mavericks i wcześniejsze

W wersji 10.9 i wcześniejszych możesz na przykład uruchomić

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

a następnie uruchom ponownie, aby zastosować zmiany.

Inne metody

/etc/pathsi /etc/paths.d/stosuj tylko (lub głównie) do muszli. Te linie /etc/pathsi /etc/paths.d/*dodaje do ścieżki przez path_helper , wykonane z /etc/profile, /etc/zshenvi /etc/csh.login. Nie znam żadnych programów innych niż powłoki, które rozważałyby /etc/pathslub /etc/paths.d/.

~/.MacOSX/environment.plist przestał działać w 10,8.

Lri
źródło
2
Tak; po prostu nie istnieje, ale tworzenie go i ustawianie odpowiednich wpisów pomaga
mgol
W Yosemite zauważyłem, że niektóre programy nie wydają się widzieć PYTHONPATH, które ustawiłem w /etc/launchd.conf i użyłem twojej poprawki w wierszu poleceń (drugi akapit w odpowiedzi) i wydaje się, że nie działa , to po prostu daje mi komunikat o błędzie / pomocy launchctl.
Tango
@ Tango Zredagowałem odpowiedź. /etc/launchd.confzostał usunięty w 10.10.
Lri
Dodam, że moje doświadczenie podczas grania w bash polega na tym, że 10.10 launchctl setenv wydaje się nic nie robić. Próbowałem ustawić zmienne env, potem sprawdziłem wartość za pomocą echa i nadal były niezdefiniowane.
Tango,
1
@ Tango Zamknij i uruchom ponownie aplikację terminalu po uruchomieniu launchctl setenv. launchctl setenvnigdy nie wpływał na istniejące procesy.
Lri
11

Jest o wiele łatwiejszy sposób. Umieść plik tekstowy w folderze /etc/paths.d/. W tym pliku tekstowym wprowadź żądaną ścieżkę ORAZ nowy wiersz. Najlepszym sposobem jest utworzenie nowego pliku dla każdej ścieżki.

W moim systemie znajduje się plik o nazwie MySQL z tekstem „/ usr / local / mysql / bin” i nową linią.

CAryaSil
źródło
Właśnie opublikowałem nowe pytanie dotyczące tego, czy istnieją sposoby zaradzenia słabości opisanej przez @LauriRanta.
kuzzooroo,
Tylko anakdota: Użyłem również tej metody, ponieważ jest to zalecany „sposób OS X”. Nie miałem szczęścia, gdy System konsekwentnie honoruje pliki PATH, które mam w /etc/paths.d, i zwykle albo używam polecenia eksportu powłoki, albo umieszczam moje PATH w ~ / .bash_profile, które zawsze działają, jeśli tylko dla mojego obecnego konta użytkownika, a nie dla całego systemu. Jeśli pliki PATH w /etc/paths.d zawsze działają dla ciebie, to zazdroszczę ci, że twój system lepiej się zachowuje niż mój;)
chillin
Ten jest dla mnie nowy. Miły!
CousinCocaine
3

Możesz ustawić zmienne środowiskowe w pliku /etc/launchd-user.conf...

W Mavericks byłem w stanie skonfigurować zmienną środowiskową w pliku za pomocą wiersza:

setenv TEST test

Po świeżym rozruchu $TESTustawiany jest plik /etc/launchd-user.conf.

Edytować

Możliwe, że składnia pliku w /etc/launchd.conf jest nieprawidłowa. Czy możesz opublikować zawartość tego pliku do sprawdzenia?

Z tego, co widzę, ustawienie zmiennej PATH w pliku /etc/launchd.conf działa normalnie. Jednak launchdnie wykonuje żadnego rozszerzenia parametrów . Dlatego jeśli masz wpis podobny do setenv PATH $PATH:/usr/local/bin, twoja wynikowa ścieżka będzie ustawiona na „ $PATH:/usr/local/bin” (uwaga: nie wartość PATH, ale tekst „$ PATH”)

Eddie Kelley
źródło
Dzięki, mam problem z ustawieniem ŚCIEŻKI, inne zmienne środowiskowe wydają się działać.
Tom
@Tom - powyżej przedstawiłem dodatkową sugestię
Eddie Kelley
1
czy to naprawdę launch-user.conf czy launch- [current_user_name] .conf
Shanimal
/etc/launchd.conf zawierający „setenv TEST test” nie propaguje się do terminala na moich komputerach Mavericks.
Dave X
Ups: s / Mavericks / Yosemite /.
Dave X
0

w mojej instalacji Mavericks dodanie „setenv PATH blablabla” do /etc/launchd.conf nie działało po ponownym uruchomieniu

więc dodałem nową ścieżkę na końcu / etc / paths, która działała.

George Dima
źródło
Nie działało to dla mnie. Uruchomiłem ponownie, /etc/pathszawiera wszystko, czego chcę, a jednak Sublime nadal widzi tylko oryginalną ŚCIEŻKĘ. Jeśli uruchomię go z terminala, to działa.
mgol
Polecenie path_helper w moim / etc / profile używa / etc / paths i /etc/paths.d do zastąpienia dowolnej ŚCIEŻKI, która mogła zostać ustawiona przez /etc/launchd.conf
Dave X
0

Przekonałem się, że PATH setenv nadal działa dla mnie dla terminalu i aplikacji, ale włamałem się do skryptów powłoki, uruchamianych bezpośrednio poprzez kliknięcie lub otwieranie w terminalu z, powiedzmy, Findera. To jest bardzo dziwne. Inne zmienne środowiskowe ustawione w /etc/launchd.confpracy.

Aby to naprawić dla skryptów powłoki uruchamianych bezpośrednio, zduplikowałem ustawienie PATH w ~/.bash_profile.

DKroot
źródło
0

Edytowanie /etc/paths.dlub używanie .bash_profilenie działało dla mnie, jednak jak sugerowano od kogoś innego (faktycznie przyszedłem tutaj, aby głosować na jego odpowiedź, ale nie mogłem znaleźć jej ponownie ?!), edytowałem, /etc/pathsktóra działa dla mnie

W moim przypadku dodałem android-narzędzie adbi androidpolecenia terminalu, wskazując na ich ścieżki sdk ( adbobecnie przeniósł się do innego katalogu), które wyglądają jak

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
longi
źródło
0

SWEET, dodanie tego XML do ~ / Library / LaunchAgents / setenv.SVN.plist pozwoliło BBEdit na użycie binariów subversion, które zainstalowałem w / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Mark M.
źródło
1
Masz pomysł, jak ustalić, czy ten plik obsługuje rozszerzenie parametrów? Możliwe, że ustawiłem ścieżkę, więc jedyna jest opcja in / opt. I myślę, że prawdopodobnie NIE obsługuje ono $ PATH. Jak na początek określisz istniejącą ścieżkę?
Mark M
-1

Po prostu dodaj swoją „bin” (ścieżkę, którą chcesz dodać) ścieżkę do pliku / etc / paths - uruchom ponownie lub zaloguj ponownie !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

zapisz plik i zaloguj ponownie ... mam nadzieję, że to pomoże

code0110
źródło