Jak ustawić globalną zmienną środowiskową PATH w systemie OS X?


101

Chciałbym dołączyć do globalnej zmiennej środowiskowej PATH w OS X, aby wszystkie powłoki użytkownika i aplikacje GUI otrzymały to samo środowisko PATH.

Wiem, że mogę dołączyć do ścieżki w skryptach uruchamiania powłoki, ale te ustawienia nie są dziedziczone przez aplikacje GUI.

Jedynym sposobem, jaki do tej pory znalazłem, jest przedefiniowanie zmiennej środowiskowej PATH w pliku /etc/launchd.conf :

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

Nie mogłem znaleźć sposobu, aby dołączyć do PATH launchd.conf.

Martwię się trochę o tę metodę, ale jak dotąd to jedyna rzecz, która działa. Czy jest lepszy sposób?



2
W przypadku Yosemite i późniejszych, patrz stackoverflow.com/questions/25385934/...
thSoft

Żadna z odpowiedzi tutaj nie dotyczy pytania PO. Ale komentarz tutaj przez thSoft dotyczy pieniędzy! Może to powinno zostać połączone lub powiązane z tym pytaniem: stackoverflow.com/questions/25385934/...
Kevin Buchs

Odpowiedzi:


71

informacje GUI palmera są poprawne, ale istnieje łatwiejszy w utrzymaniu sposób modyfikowania ścieżki widocznej przez powłokę. Jak powiedział mediaslave , możesz edytować /etc/paths, ale jeszcze lepiej możesz upuścić plik tekstowy, /etc/paths.d/który zawiera ścieżkę, a wszystkie powłoki poprawnie utworzą ścieżkę.

Na przykład w moim systemie:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
Fajnie dzięki! Uwaga: wymaga to wylogowania i ponownego zalogowania, zanim zadziała.
weronika

@weronika: Stwierdziłem, że wystarczy wyjść z programu i uruchomić go ponownie X11(mniej bolesne niż całkowite wylogowanie). Nie próbowałem tego Terminal.
Peter Gluck

Miałem na myśli Terminal - masz rację, zapomniałem podać.
weronika

8
Warto to wiedzieć, ale NIE odpowiada na pytanie PO, ponieważ ten mechanizm nie ma zastosowania do aplikacji GUI. OP szukał ujednoliconego rozwiązania, które umożliwi mu dołączenie do ustawień domyślnych $PATH.
2013 r

co rozumiesz przez „mój system” tutaj, @cogg? Czy nie wszyscy tu używamy OS X? Przepraszam, ale wciąż jestem nowy w OS X. Używam OS X 10.7
ericn

48

/etc/launchd.conf

launchd.confPlik jest ** tylko kompletne rozwiązanie, które będzie pracować dla obu linii poleceń i GUI aplikacji na OS X v10.8 (Mountain Lion) i v10.9 (Mavericks), jednego, który będzie działał z GUI i konsoli aplikacji dla wszystkich użytkowników .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Dodaj

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

W powyższym przykładzie dodałem /usr/local/bindo domyślnych wartości środowiska PATH.

Pamiętaj, że ten plik nie jest skryptem i nie masz możliwości korzystania z podstawień. Ponadto, aby je zastosować, musisz ponownie uruchomić komputer.

Pamiętaj, że wszystkie inne są tylko częściowymi rozwiązaniami:

  • environment.plist nie działa w przypadku aplikacji uruchomionych przez Spotlight.
  • /etc/paths - tylko dla konsoli
  • /etc/csh.cshrclub /etc/bashrc- tylko dla niektórych muszli

Ta odpowiedź jest oparty na tym samym pytanie Ustawianie zmiennych środowiskowych w systemie Mac OS X .


7
Świetne znalezisko, ale pytanie już mówi o uruchomieniu i pyta, jak dołączyć do ścieżki na nim.
cregox,

21
Czy naprawdę dodałeś komentarz do pierwotnego pytania, wskazując na siebie jako „prawdziwą odpowiedź”?
TJ Luoma,

7
Sugeruje to twoja - pomocna - odpowiedź, ale po prostu przeliteruj: chęć OP dołączenia do domyślnej ścieżki nie jest obsługiwana, ponieważ nie możesz odwoływać się do innych zmiennych środowiskowych /etc/launchd.conf.
2013 r

To nie jest globalne - środowisko wiersza poleceń odrzuci to, gdy / etc / profile wywoła path_helper i odbuduje PATH z / etc / paths and /etc/paths.d/
Dave X

1
według apple.stackexchange.com/questions/106355 /... to nie działa długo na Yosemite lub później
ericn

7

Będziesz musiał ustawić go na zasadzie shell-by-shell; Powłoki Bash i csh-podobne nie współużytkują tych samych plików konfiguracyjnych i składni do dostosowywania PATH.

Próba wykonania tego w launchctlnie zadziała, ponieważ zmienne środowiskowe są ustawiane podczas logowania; nie istnieją one w całym systemie w Uniksie poza sesją powłoki.

Więc chcesz dodać

setenv PATH "$PATH:/add/my/extra/path"

do /etc/csh.cshrci

export PATH="$PATH:/more/paths:/

do /etc/bashrc.

Jeśli potrzebujesz zmiennych środowiskowych w aplikacjach GUI, jest to bardziej skomplikowane. Musisz utworzyć .MacOSX/environment.plistplik w katalogu domowym każdego użytkownika. .MacOSXKatalog prawdopodobnie nie będzie istnieć domyślnie, więc musisz go utworzyć.

Format pliku jest taki:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Więcej na ten temat environment.plist znajduje się na stronie Apple .


Ale ustawienia działają, gdy są ustawione w /etc/launchd.conf ... Hmmm ... / me jest zdezorientowany.
Kserkses

Naprawdę? Jaką zmienną środowiskową tam ustawiasz?
palmer

1
Tylko aktualizacja OS X 10.8: ~/.MacOSX/environment.plistpodejście nie jest już obsługiwane i nie ma substytutu na poziomie użytkownika. Możesz korzystać z całego systemu /etc/launchd.conf(i istnieje rozwiązanie dla * aplikacji).
2013 r

Nie odpowiada na pytania OP.
Kevin Buchs,

3

Możesz edytować swoją globalną ścieżkę, dodając linie do /etc/pathsjednej ścieżki na linię.

sudo nano /etc/paths powinien cię tam zabrać.


2
Warto to wiedzieć, ale nie odpowiada na pytanie PO, ponieważ ten mechanizm nie ma zastosowania do aplikacji GUI.
2013 r


1

Nie jestem pewien, czy ktoś opisał najprostszy i najbardziej elegancki sposób. Przynajmniej w systemie Mac OS X 10.6 (Snow Leopard).

Messing z [/etc/|~/.]z [profile|bashrc]plikami może pracować, ale to nieco hack. /etc/paths.d/Katalog jest do zrobienia:

  • Sudo do ulubionego edytora.
  • Utwórz nowy plik o nazwie *name*(po prostu nie nazywaj go czymś, co już tam jest) /etc/paths.d/ze ścieżką do wiersza:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Następnie dodaj

    eval '/usr/libexec/path_helper -s`
    

    do profilelub bashrc, i powinieneś być dobry.


1
Warto to wiedzieć, ale nie odpowiada na pytanie PO, ponieważ ten mechanizm nie ma zastosowania do aplikacji GUI.
2013 r

Czy nazwa pliku jest dosłownie *name*? Czy masz na myśli tylko name?
Peter Mortensen

0

Nie jestem pewien, czy uruchomione to akceptuje, ale spróbuj:

setenv PATH "$ PATH: / my / path"

1
Niestety to nie działa. Nie wygląda na to, że launchctl ma łatwy dostęp do zmiennych środowiskowych. Istnieje polecenie pobierania zmiennych środowiskowych, ale nie ma absolutnie żadnej dokumentacji, jak z niego korzystać.
lajos

0

Nie jestem pewien, dlaczego używałbyś go /etc/launchd.confw przeciwieństwie do /etc/profile- ale nie jestem ekspertem w Mac OS X - wierzę, że jestem pewien, że działa, ale launchdjest to implementacja / zamiennik Mac OS X dla init- Mac OS X mnie myli.

Tak czy inaczej, setenv PATH "$PATH:/more/paths:/and/more/paths"zadziała (tcsh), a odpowiednik powłoki bourn brzmi export PATH="$PATH:/more/paths:/and/more/paths"- nie mam pojęcia, jak launchdjest ona powiązana z określoną powłoką.

Myślę, że zadałem więcej pytań niż odpowiedziałem =)


4
Ustawienia ścieżki / etc / profile nie są widoczne w żadnej aplikacji GUI OS X. Dotyczy to tylko bash. Chcę, aby wszystkie aplikacje otrzymały nowe ustawienie ścieżki.
lajos

1
Unix? Jasne, to jest unix. To znaczy trochę. Tak, zepsuliśmy rzeczy, które działały przez 30 lat, ale wciąż są uniksowe! / westchnienie
Matt Simmons
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.