Odwoływanie się do zmiennych środowiskowych * w * / etc / environment?

19

Niedawno odkryłem /etc/environment, że wydaje się to bardziej standardowy sposób ustawiania prostych zmiennych środowiskowych niż skrypty, ale zastanawiałem się, czy istnieje sposób na odwoływanie się do zmiennych środowiskowych w pliku / etc / environment.

To znaczy, mam to:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Jeśli jednak spróbuję dodać $JAVA_HOME/bindo definicji ŚCIEŻKI, dostanę $ JAVA_HOME / bin, a nie zmienną interpolowaną. Aby temu zaradzić, tworzę environment.sh w profile.d, aby dodać /binwpisy do ścieżki, ale wydaje się to niechlujne i niezorganizowane.

Czy istnieje sposób ponownego odniesienia zmiennych środowiskowych w / etc / environment?

Stefan Kendall
źródło

Odpowiedzi:

13

/etc/environmentPlik jest odczytywany przez pam_envmoduł PAM . Obsługuje tylko proste pary klucz-wartość, bez podstawienia po prawej stronie.

Jeśli chcesz zbudować wartość z podstawieniami lub innymi rozszerzeniami powłoki, musisz przejść przez powłokę. /etc/profile(lub plik w /etc/profile.d) jest właściwym miejscem dla nich. Jest to tradycyjne miejsce ( /etc/environmentjest stosunkowo nową innowacją w historii systemów uniksowych) i na pewno nie ma w nim niczego niechlujnego. Główną zaletą /etc/environmentjest to, że pozwala na ustawienie zmiennych środowiskowych nawet przy użyciu metod logowania, które nie wymagają powłoki lub dla użytkowników korzystających z powłoki innej niż Bourne, ale nie są one powszechne w praktyce.

Gilles „SO- przestań być zły”
źródło
Bez podstawienia kończy się wiele zwolnień /etc/environment, uciekłem się /etc/profile, dzięki za sugestię.
SAFX
2

Dokumentacja Ubuntu sprawia, że ​​wydaje się to niemożliwe. ALE jest odpowiedź.

ODPOWIEDŹ : Twórz trwałe, systemowe zmienne środowiskowe w/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Szczegóły:
Oto kilka dodatkowych szczegółów z dokumentacji zmiennych środowiskowych .
Oficjalna rekomendacja to używanie /etc/environment, tak jak próbowałeś. Problem w tym, że ten plik nie jest plikiem skryptu. Innymi słowy, nie można używać zmiennych w deklaracjach zmiennych.

Dokumentacja jest kontynuowana z 2 innymi plikami „Niezalecane”
/etc/profilei /etc/bash.bashrc.

/etc/profile„robi niewiele więcej niż wywoływanie pliku /etc/bash.bashrc”. Zamiast tego wybierz

/etc/bash.bashrc ponieważ „Ubuntu jest domyślnie skonfigurowane do uruchamiania tego pliku za każdym razem, gdy użytkownik wejdzie do powłoki lub środowiska pulpitu”.

csi
źródło
Zaktualizowałem EnvironmentVariables w porozumieniu z niektórymi programistami Ubuntu, więc nie ma już tych „niezalecanych” instrukcji.
Gunnar Hjalmarsson
„za każdym razem, gdy użytkownik wchodzi do powłoki”. co powinienem zrobić, gdy nie ma użytkownika, aby wprowadzić powłokę? Potrzebuję zmiennych środowiskowych dla moich zautomatyzowanych użytkowników, którzy uruchamiają oprogramowanie podczas uruchamiania. Na przykład mam tylko 6 linii konfiguracji proxy. Co powinienem z tym zrobić?
eis