Referenzieren von Umgebungsvariablen * in * / etc / environment?

19

Ich habe kürzlich herausgefunden /etc/environment, dass dies eine Standardmethode zum Einrichten einfacher Umgebungsvariablen ist als Skripts, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, Umgebungsvariablen in der Datei / etc / environment zu referenzieren.

Das heißt, ich habe folgendes:

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"

Wenn ich jedoch versuche, $JAVA_HOME/binder PATH-Definition etwas hinzuzufügen , erhalte ich $ JAVA_HOME / bin und nicht die interpolierte Variable. Um dies zu beheben, erstelle ich die Datei environment.sh in profile.d, um die /binEinträge zum Pfad hinzuzufügen , aber dies scheint schlampig und unorganisiert zu sein.

Gibt es eine Möglichkeit, die Umgebungsvariablen in / etc / environment zu referenzieren?

Stefan Kendall
quelle

Antworten:

13

Die /etc/environmentDatei wird vom pam_envPAM-Modul gelesen . Es werden nur einfache Schlüssel-Wert-Paare ohne Substitution auf der rechten Seite unterstützt.

Wenn Sie den Wert mit Ersetzungen oder anderen Shell-Erweiterungen erstellen möchten, müssen Sie eine Shell durchlaufen. /etc/profile(oder eine Datei in /etc/profile.d) ist der richtige Ort für diese. Dies ist der traditionelle Ort ( /etc/environmenteine relativ neue Innovation in der Geschichte der Unix-Systeme), und es ist mit Sicherheit nichts Schlampiges daran, ihn zu benutzen. Der Hauptvorteil von /etc/environmentbesteht darin, dass Umgebungsvariablen auch bei Anmeldemethoden festgelegt werden können, an denen keine Shell beteiligt ist, oder für Benutzer, die eine Nicht-Bourne-Shell verwenden, diese sind jedoch in der Praxis nicht üblich.

Gilles 'SO - hör auf böse zu sein'
quelle
Ohne Ersatz haben Sie am Ende eine Menge Entlassungen /etc/environment, auf die ich zurückgegriffen habe /etc/profile, danke für Ihren Vorschlag.
SAFX,
2

Die Ubuntu-Dokumentation lässt dies unmöglich erscheinen. ABER es gibt eine Antwort.

ANTWORT : Erstellen Sie persistente, systemweite Umgebungsvariablen in/etc/.bashrc

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

Details:
Hier finden Sie weitere Details aus der Dokumentation zu Umgebungsvariablen .
Die offizielle Empfehlung ist zu verwenden /etc/environment, wie Sie es versucht haben. Das Problem ist, dass diese Datei keine Skriptdatei ist. Mit anderen Worten, Sie können in Variablendeklarationen keine Variablen verwenden.

Die Dokumentation wird mit 2 anderen "Nicht empfohlen" -Dateien
/etc/profileund fortgesetzt /etc/bash.bashrc.

/etc/profilemsgstr "ruft nur die Datei /etc/bash.bashrc auf". Also wählen Sie stattdessen

/etc/bash.bashrc weil "Ubuntu ist standardmäßig so konfiguriert, dass diese Datei ausgeführt wird, wenn ein Benutzer eine Shell oder die Desktop-Umgebung betritt."

csi
quelle
Ich habe EnvironmentVariables in Absprache mit einigen Ubuntu-Entwicklern aktualisiert , sodass diese "nicht empfohlenen" Aussagen nicht mehr vorhanden sind.
Gunnar Hjalmarsson
msgstr "wenn ein Benutzer eine Shell betritt". Was soll ich tun, wenn kein Benutzer eine Shell betritt? Ich benötige Umgebungsvariablen für meine automatisierten Benutzer, die beim Start Software ausführen. Zum Beispiel habe ich 6 Zeilen Proxy-Konfiguration allein. Was soll ich damit machen?
Eis