Chcę tylko ustawić zmienną środowiskową JAVA_HOME
dla całego systemu, dla wszystkich użytkowników, w tym użytkownika root .
Wymagania:
- dostępne dla zwykłych użytkowników
- dostępne do rootowania
- zawsze ładowany, nie tylko dla bash (gnome-terminal domyślnie nie uruchamia basha)
- do pracy z Ubuntu, Debian i opcjonalnie Red Hat
- świetnie, jeśli można łatwo napisać dodatek
Odpowiedzi:
Ponieważ nikt nie dodał tutaj pełnej odpowiedzi, obecnie uważam to za najlepszą, przynajmniej dla Ubuntu, ale jestem otwarty na dostosowanie odpowiedzi dla innych platform * nix.
Inne opcje, które zostały już rozważone, ale zostały wykluczone:
/etc/environment
działa, ale jest trudniejszy w utrzymaniu, ponieważ inne narzędzia lub ludzie mogą go edytować./etc/profile
- tak samo jak powyżejźródło
Na Debianie / Ubuntu będzie to / etc / environment
Nie znam odpowiednika Red Hat.
źródło
/etc/environment
. Zobacz także serverfault.com/a/584072/26218Nie rozumiem, dlaczego wykluczyłeś / etc / profile. To jest poprawna lokalizacja.
źródło
Kilku odpowiedziało, że
/etc/environment
jest to deprecjonowane i / lub nie jest już używane w Debianie, a to jest (jak w wersji 7) fałszywe.Plik jest w rzeczywistości odczytywany przez PAM, a konkretnie
pam_env(8)
przez domyślnąenvfile
flagę. Strona man podaje również tę wartość domyślną w sekcji PLIKI.Cytowane strony wiki (zwłaszcza lokalna) jedynie stwierdzają, że zmienne środowiskowe oparte na ustawieniach regionalnych powinny się teraz znajdować
/etc/profile
. Ich stwierdzenie „(w starszych wersjach Debiana, także / etc / environment)” jest niejasne i dotyczy kontekstów regionalnych.Szybki grep poprzez
/etc/pam.d
pokazy:Te wiersze konfiguracji są addytywne, a ponieważ brakuje pierwszego
envfile
, domyślnie jest to/etc/environment
.Wszystko to oczywiście opiera się na wszelkich
crond
plikach binarnych, których używasz ( powłoki logowania itp.), Skompilowanych z PAM.Wreszcie oznacza to, że inne systemy korzystające z PAM (np. RedHat) zachowują się tak samo, jak widać na ich stronie podręcznika.
źródło
Uwaga dodatkowa: spójrz na środowisko modułów . Używam tego za każdym razem, gdy muszę zaoferować dziesiątki lub setki użytkownikom złożone, wersjonowane, samorozszerzalne, zwięzłe środowisko UNIX. Jest stosowany głównie w wielkoskalowych środowiskach HPC dla wielu użytkowników. Samo użycie go dla jednej konkretnej zmiennej jest z pewnością nadmierną inżynierią, ale robi niesamowitą robotę, gdy potrzebujesz więcej niż kilku pakietów oprogramowania i ich środowiska.
źródło
/etc/profile
powinno działać. Testowałem właśnie teraz, aby mieć pewność, włożyćexport SOMETEST=1234
do/etc/profile
i po ponowne rejestrowanieecho $SOMETEST
dał mi1234
, jak oczekiwano. Również zgnome-terminal
źródło
/etc/enviroment
nie jest używany w ostatniej stabilnej wersji Debiana. Rekomendacją jest utworzenie własnego*.sh
pliku/etc/profile.d/
dla tego morświna, jak powiedział Sorin S. Zobacz https://wiki.debian.org/EnvironmentVariablesźródło
W tym przypadku nie można użyć ~ określonych plików. więc....
/etc/profile
byłoby w tym przypadku właściwym miejscem. Obecnie zalogowani użytkownicy muszą uzyskać nową sesję logowania, ale nie powinno to stanowić większego problemu.@ wk01: domyślnie
/etc/profile
nie jest ładowany przez powłokę niezalogowaną. Twój.bashrc
jest prawdopodobnie załadowaniem ...źródło