Aktualizacja: poniższy link nie ma pełnej odpowiedzi . Konieczność ustawienia ścieżki lub zmiennej w dwóch miejscach (jednym dla GUI i drugim dla powłoki) jest kiepska.
Nie jest duplikatem : Ustawianie zmiennych środowiskowych w OS X?
Pochodząc z tła systemu Windows, w którym bardzo łatwo jest ustawiać i modyfikować zmienne środowiskowe (wystarczy przejść do Właściwości systemu> Zaawansowane> Zmienne środowiskowe), nie wydaje się to takie proste w Mac OS 10.5. Większość referencji mówi, że powinienem zaktualizować / etc / profile lub ~ / .profile. Czy są to odpowiedniki Zmiennych systemowych i Zmiennych użytkownika? Na przykład, gdzie powinienem ustawić moją JAVA_HOME
zmienną?
EDYTOWAĆ:
Chcę mieć dostęp do zmiennej z terminala, a także aplikacji takiej jak Eclipse. Mam również nadzieję, że nie muszę restartować / wylogowywać się, aby to zadziałało.
źródło
Odpowiedzi:
Nie ma potrzeby kopiowania. Możesz ustawić zmienne środowiskowe używane przez uruchomione (i procesy potomne, tj. Wszystko, co zaczynasz od Spotlight)
launchctl setenv
.Na przykład, jeśli chcesz utworzyć kopię lustrzaną swojej bieżącej ścieżki w uruchomionej po jej skonfigurowaniu w
.bashrc
dowolnym miejscu:Zmienne środowiskowe nie są automatycznie aktualizowane w uruchomionych aplikacjach. Będziesz musiał ponownie uruchomić aplikacje, aby uzyskać zaktualizowane zmienne środowiskowe (chociaż możesz po prostu ustawić zmienne w swojej powłoce, np. Nie ma potrzeby ponownego uruchamiania
PATH=whatever:you:want
terminala).źródło
launchctl setenv
wydają się być widoczne tylko dla użytkownika dokonującego zmiany. Jeśli ustawię zmienną jako zwykły użytkownik, nie będzie widoczna do rootowania (przez sudo) i odwrotnie.ps aux | grep launchd
pokaże to. Sprawdź takżeman sudo
, które dokumenty, któresudo
(domyślnie) celowo resetują środowisko - jeślisudo -E
je zachowasz (w tym zmienne, które ustawiłeślaunchctl setenv
). Nawiasem mówiąc, czy macie na to rzeczywisty wniosek? Jeśli tak, to czy ta metoda działa dla Ciebie?Istnieje kilka miejsc, w których można ustawić zmienne środowiskowe.
~/.profile
: użyj tego dla zmiennych, które chcesz ustawić we wszystkich programach uruchamianych z terminala (zauważ, że w przeciwieństwie do Linuksa wszystkie powłoki otwarte w Terminal.app są powłokami logowania).~/.bashrc
: jest to wywoływane dla powłok, które nie są powłokami logowania. Użyj tego dla aliasów i innych rzeczy, które muszą zostać ponownie zdefiniowane w podpowłokach, a nie dla dziedziczonych zmiennych środowiskowych./etc/profile
: jest ładowany przed ~ / .profile, ale poza tym jest równoważny. Użyj go, jeśli chcesz, aby zmienna miała zastosowanie do programów terminalowych uruchomionych przez wszystkich użytkowników komputera (przy założeniu, że używają bash).~/.MacOSX/environment.plist
: jest to czytane przez loginwindow przy logowaniu. Dotyczy to wszystkich aplikacji, w tym GUI, z wyjątkiem tych uruchomionych przez Spotlight w wersji 10.5 (nie 10.6). Wymaga to wylogowania i ponownego zalogowania, aby zmiany odniosły skutek. Ten plik nie jest już obsługiwany od wersji OS X 10.8.launchd
instancja użytkownika : dotyczy to wszystkich programów uruchomionych przez użytkownika, GUI i CLI. Możesz zastosować zmiany w dowolnym momencie, używającsetenv
polecenia wlaunchctl
. Teoretycznie powinieneś być w stanie wstawiaćsetenv
polecenia~/.launchd.conf
ilaunchd
czytać je automatycznie po zalogowaniu się użytkownika, ale w praktyce nigdy nie zaimplementowano obsługi tego pliku. Zamiast tego możesz użyć innego mechanizmu do wykonania skryptu przy logowaniu i uzyskać to wywołanie skryptu,launchctl
aby skonfigurowaćlaunchd
środowisko./etc/launchd.conf
: jest to odczytywane przez uruchomienie podczas uruchamiania systemu i zalogowanie się użytkownika. Wpływają one na każdy pojedynczy proces w systemie, ponieważ uruchamiany jest procesem głównym. Aby zastosować zmiany do uruchomionego uruchomionego katalogu głównego, możesz wprowadzić do niego poleceniasudo launchctl
.Podstawowe rzeczy do zrozumienia to:
launchctl
; zaktualizowane zmienne są następnie dziedziczone przez wszystkie nowe procesy, które odtąd forks.Przykład ustawienia zmiennej środowiskowej za pomocą uruchomionego:
Teraz uruchom aplikację GUI, która korzysta ze zmiennej, i voila!
Aby obejść fakt, że
~/.launchd.conf
nie działa, możesz umieścić następujący skrypt~/Library/LaunchAgents/local.launchd.conf.plist
:Następnie możesz umieścić w
setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
środku~/.launchd.conf
, a będzie on wykonywany przy każdym logowaniu.Zauważ, że podczas pipetowania listy poleceń do launchctl w ten sposób nie będziesz mógł ustawić zmiennych środowiskowych o wartościach zawierających spacje. Jeśli musisz to zrobić, możesz zadzwonić launchctl następująco:
launchctl setenv MYVARIABLE "QUOTE THE STRING"
.Należy również pamiętać, że inne programy uruchamiane przy logowaniu mogą być uruchamiane przed uruchomieniem, a zatem mogą nie widzieć ustawionych zmiennych środowiskowych.
źródło
~/.MacOSX/environment.plist
, na moim Lwie jest on czytany i używany. Właśnie to przetestowałem. Właściwie wolę to niż .launchd.conf, ponieważ używam panelu preferencji RCenvironment, aby go utrzymać.~/.launchd.conf
do wersji 10.6.8 - wydaje się, że nie ma żadnego efektu. Również strona man mówi, że ten plik nie jest obecnie obsługiwany.~/.launchd.conf
nadal nie jest obsługiwany i nie działa w systemie OS X 10.8.3? Zobaczman launchd.conf
Myślę, że OP szuka prostego rozwiązania podobnego do systemu Windows.
proszę bardzo:
https://www.macupdate.com/app/mac/14617/rcenvironment
źródło
Możesz przeczytać o systemie Linux, który jest bardzo podobny do Mac OS X. Lub możesz przeczytać na BSD Unix, który jest nieco bliżej. W większości różnice między Linuksem a BSD nie są tak duże.
/etc/profile
są zmiennymi środowiskowymi systemu.~/.profile
są specyficznymi dla użytkownika zmiennymi środowiskowymi.„gdzie mam ustawić moją zmienną JAVA_HOME?”
/etc/profile
?Generalnie wolę nie zadzierać z ustawieniami systemowymi, mimo że jestem jedynym użytkownikiem. Wolę edytować moje ustawienia lokalne.
źródło
W przypadku aplikacji GUI musisz tworzyć i edytować
~/.MacOSX/environment.plist
. Więcej informacji tutaj . Musisz się wylogować, aby zaczęły obowiązywać. Nie jestem pewien, czy wpływają one również na aplikacje uruchamiane z Terminala, ale zakładam, że tak.W przypadku aplikacji uruchomionych z terminalu możesz także edytować plik ~ / .profile.
źródło
Wystarczy otworzyć
~/.profile
plik za pomocąnano
w Terminalu i wpisać tam:Zapisz ten plik (cmd + X i Y). Następnie wyloguj się / zaloguj ponownie lub po prostu otwórz nową kartę w Terminalu i spróbuj użyć nowej zmiennej.
PROSZĘ NIE zapomnij dodać „: $ PATH” po czymkolwiek / you / want, w przeciwnym razie usuniesz wszystkie ścieżki w zmiennej PATH, które były tam wcześniej.
źródło
Synchronizuj zmienne środowiskowe OS X dla aplikacji wiersza poleceń i GUI z jednego źródła za pomocą osx-env-sync .
Tutaj także zamieściłem odpowiedź na powiązane pytanie .
źródło
Jeśli chcesz zmienić zmienne środowiskowe na stałe w systemie macOS, ustaw je
/etc/paths
. Uwaga : ten plik jest domyślnie tylko do odczytu, więc będziesz musiał chmod, aby uzyskać uprawnienia do zapisu.źródło
/usr/bin/local
w tym pliku, nawet bez modyfikacji pliku, tak było domyślnie, a jednak moje aplikacje GUI widzą tylko/usr/bin:/bin:/usr/sbin:/sbin
. Ponownie uruchomiłem wiele razy.cat /etc/paths/
?Dla 2020 użytkowników Mac OS X Catalina:
Zapomnij o innych bezużytecznych odpowiedziach, tutaj potrzebne są tylko dwa kroki:
Utwórz plik z konwencją nazewnictwa: priorytet-nazwa_aplikacji. Następnie skopiuj i wklej ścieżkę, którą chcesz dodać
PATH
.Np.
80-vscode
Z zawartością/Applications/Visual Studio Code.app/Contents/Resources/app/bin/
w moim przypadku.Przenieś ten plik do
/etc/paths.d/
. Nie zapomnij otworzyć nowej karty (nowej sesji) w Terminalu i wpisz,echo $PATH
aby sprawdzić, czy ścieżka została dodana!Uwaga: ta metoda dodaje tylko twoją ścieżkę do
PATH
.źródło