Wygląda na launchd.conf
to, że nie ładuje już mojej zmiennej środowiskowej. Czy ktoś to zauważył?
Czy istnieje inne rozwiązanie, aby trwale ustawić zmienne środowiskowe?
Wygląda na launchd.conf
to, że nie ładuje już mojej zmiennej środowiskowej. Czy ktoś to zauważył?
Czy istnieje inne rozwiązanie, aby trwale ustawić zmienne środowiskowe?
Odpowiedzi:
Utwórz
environment.plist
plik w~/Library/LaunchAgents/
tej treści:Możesz dodać wiele
launchctl
poleceń wewnątrz<string></string>
bloku.plist
Uaktywni po ponownym uruchomieniu systemu. Możesz także użyćlaunchctl load ~/Library/LaunchAgents/environment.plist
go do natychmiastowego uruchomienia.[Edytować]
To samo rozwiązanie działa również w El Capitan.
Xcode 7.0+ domyślnie nie ocenia zmiennych środowiskowych. Stare zachowanie można włączyć za pomocą tego polecenia:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[Edytować]
Jest kilka sytuacji, w których to nie do końca działa. Jeśli komputer zostanie zrestartowany i zostanie wybrana opcja „Ponownie otwórz okna podczas ponownego logowania”, ponownie otwarte okna mogą nie widzieć zmiennych (być może są one otwarte przed uruchomieniem agenta). Ponadto, jeśli zalogujesz się przez ssh, zmienne nie zostaną ustawione (więc musisz ustawić je w ~ / .bash_profile). Wreszcie, wydaje się, że nie działa to w przypadku PATH w El Capitan i Sierra. Należy to ustawić za pomocą „ścieżka użytkownika config Launctl ...” oraz w / etc / paths.
źródło
UseSanitizedBuildSystemEnvironment
).[ Oryginalna odpowiedź ]: Nadal można użyć
launchctl setenv variablename value
do ustawienia zmiennej, która będzie pobierana przez wszystkie aplikacje (aplikacje graficzne uruchamiane przez Dock lub Spotlight, oprócz tych uruchamianych przez terminal).Oczywiście nie będziesz chciał tego robić przy każdym logowaniu.
[ Edytuj ]: Aby tego uniknąć, uruchom
AppleScript Editor
, wprowadź polecenie takie jak to:(Użyj wielu linii, jeśli chcesz ustawić wiele zmiennych)
Teraz zapisz (
⌘
+s
) jako Format pliku: Aplikacja . Na koniec otwórzSystem Settings
→ Użytkownicy i grupy → Zaloguj się i dodaj nową aplikację.[ Oryginalna odpowiedź ]: Aby obejść to miejsce, wszystkie zmienne, które chcesz zdefiniować w skrypcie krótkiej powłoki, zapoznaj się z poprzednią odpowiedzią na temat uruchamiania skryptu przy logowaniu do MacOS . W ten sposób skrypt zostanie wywołany, gdy użytkownik się zaloguje.
[ Edytuj ]: Żadne z tych rozwiązań nie jest idealne, ponieważ zmienne zostaną ustawione tylko dla tego konkretnego użytkownika, ale mam nadzieję / zgaduję, że może być wszystkim, czego potrzebujesz.
Jeśli masz wielu użytkowników, możesz ręcznie ustawić element logowania dla każdego z nich lub umieścić kopię com.user.loginscript.plist w każdym z lokalnych katalogów Library / LaunchAgents , wskazując ten sam skrypt powłoki.
Oczywiście żadne z tych obejść nie jest tak wygodne jak /etc/launchd.conf .
[ Dalsza edycja ]: Użytkownik poniżej wspomina, że to nie działało dla niego. Jednak przetestowałem na wielu maszynach Yosemite i to działa dla mnie. Jeśli masz problem, pamiętaj, że musisz ponownie uruchomić aplikacje, aby to zadziałało. Dodatkowo, jeśli ustawisz zmienne w terminalu za pomocą ~ / .profile lub ~ / .bash_profile , zastąpią one rzeczy ustawione przez launchctl setenv dla aplikacji uruchamianych z powłoki .
źródło
Możliwe jest ustawienie zmiennych środowiskowych w systemie Mac OS X 10.10 Yosemite za pomocą 3 plików + 2 poleceń.
Plik główny z definicją zmiennych środowiskowych:
Definicja usługi do ładowania zmiennych środowiskowych dla aplikacji użytkownika (terminal, IDE, ...):
Ta sama definicja usługi dla aplikacji użytkownika root:
I na koniec powinniśmy zarejestrować te usługi:
Co otrzymujemy:
Problemy / problemy:
Aby zmienne env zostały poprawnie pobrane przez aplikacje po ponownym uruchomieniu systemu , będziesz potrzebować:
Dzieje się tak, ponieważ Apple zaprzecza wyraźnemu porządkowaniu załadowanych usług, dlatego zmienne env są rejestrowane równolegle z przetwarzaniem „kolejki ponownego otwarcia”.
Ale w rzeczywistości restartuję system tylko kilka razy w roku (w przypadku dużych aktualizacji), więc nie jest to wielka sprawa.
źródło
JAVA_HOME
), ale nie dlaPATH
zmiennej (patrz moje pytanie na pytanie inaczej ).launchd
, ale czy nie byłoby możliwe załadowanie tych demonów przy rozruchu (tj. Przed zalogowaniem)? To powinno obejść wszystkie wymienione przez Ciebie problemy.Cytowano z
Apple Developer Relations 10-Oct-2014 09:12 PM
Rozwiązanie:
źródło
/Library/LaunchDaemons
i zamiast mówićlaunchctl
polecenie uruchomienialimit
polecenia, powiedz mu, aby uruchomiłosetenv
poleceniePATH
i ciąg ścieżki jako argumenty.launchd
powinien podnieść go automatycznie przy starcie i niemal natychmiast dokonać automatycznej modyfikacji.<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Oto polecenia przywracające stare zachowanie:
Teraz możesz określić polecenia takie jak
setenv JAVA_HOME /Library/Java/Home
w/etc/launchd.conf
.Sprawdzone na El Capitan.
źródło
Co zadziałało dla mnie (zainspirowane podziękowaniami aax):
Wklej to do /Library/LaunchDaemons/com.apple.launchd.limit.plist, a następnie uruchom ponownie:
Jeśli potrzebujesz tego krok po kroku:
⌘+v
). Wymusi to ograniczenie do 16384 plików na proces i 16384 plików ogółemesc
następnie:wq
Mam nadzieję, że to ci pomogło.
źródło
Możesz spróbować https://github.com/ersiner/osx-env-sync . Obsługuje aplikacje wiersza polecenia i GUI z jednego źródła i działa z najnowszą wersją systemu OS X (Yosemite).
Możesz używać podstawiania ścieżek i innych sztuczek powłoki, ponieważ to, co piszesz, to zwykły skrypt bash, który w pierwszej kolejności jest pozyskiwany przez bash. Bez ograniczeń .. (Sprawdź dokumentację osx-env-sync, a zrozumiesz, jak to osiągnąć).
Odpowiedziałem na podobne pytanie tutaj, gdzie znajdziesz więcej.
źródło
Rozwiązaniem jest dodanie zmiennej
/etc/profile
. Wtedy wszystko działa zgodnie z oczekiwaniami! Oczywiście MUSISZ to zrobić jako użytkownik root z sudo nano / etc / profile. Jeśli edytujesz go w jakikolwiek inny sposób, system będzie narzekał na uszkodzony profil / etc /, nawet jeśli zmienisz uprawnienia do rootowania.źródło
Dodałem zmienne do ~ / .bash_profile w następujący sposób. Po zakończeniu uruchom ponownie / wyloguj się i zaloguj
UWAGA: bez ponownego uruchomienia / wylogowania i zalogowania można zastosować te zmiany za pomocą;
źródło