/etc/environment
ist offiziell der richtige Ort für systemweite Umgebungsvariablen. Aber wie kann ich die Zuordnungen in dieser Datei neu laden, ohne neu zu starten oder neu zu protokollieren?
Interessanterweise hilft mir Google hier nicht weiter, abgesehen von den Dutzenden von Blog-Posts, die die Verwendung vorschlagen
source /etc/environment
Das wird natürlich nie funktionieren, da /etc/environment
es sich um eine Liste von Zuweisungen (eine pro Zeile) und kein ausführbares Skript handelt (daher die fehlenden export
Befehle in /etc/environment
...).
ubuntu
environment-variables
fgysin
quelle
quelle
for line in $( cat /etc/environment ) ; do export $line ; done
, wenn das Dateiformat istkey=value
.export
...export
wäre das notwendig ... (ohne es handelt es sich nur um ein normales Non -Umgebungsvariable in der aktuellen Shell, in untergeordneten Prozessen nicht verfügbar)Antworten:
Eine Sache, bei der Sie sich irren, ist,
/etc/environment
dass zum Neuladen ein Neustart erforderlich ist. Das ist falsch. Das einzige Mal, dass die Datei gelesen wird, ist die Anmeldung , wenn der PAM-Stapel aktiviert ist - speziellpam_env.so
, der die Datei liest.Das Abmelden und erneutes Anmelden würde die Änderungen übernehmen - und tatsächlich müssen Sie dies tun, wenn alle Prozesse die neue Umgebung erhalten sollen . Bei allen anderen "Lösungen" 2 wird die Umgebung nur auf den Single-Shell-Prozess angewendet, nicht jedoch auf alles, was Sie über die GUI starten, einschließlich neuer Terminalfenster. 1
Wenn Sie damit einverstanden sind, können Sie das Fehlen von
export
Befehlen mitset -a
und ausgleichenset +a
. Es bleibt jedoch immer noch ein schlechter Weg, da die Datei auch keine Anführungszeichen verwendet. Aber das sollte gut funktionieren:1 GNOME Session Manager bietet eine Möglichkeit, die eigene Umgebung zu ändern, jedoch nur während der
Initialization
Phase:2
gdb
ist keine Lösung, kann aber manchmal verwendet werden. Sie müssen es an die laufenden Prozesse Ihres Sitzungsmanagers (z. B.gnome-session
), Ihres Fenstermanagers (z. B.gnome-shell
oderopenbox
), Ihrer Taskleiste / Ihres Panels (z. B.xfce4-panel
) und generell an alles andere anhängen, das möglicherweise Dinge ausführen würde. Für jeden dieser Prozesse müssen Sie eine Verbindunggdb
mit der PID herstellen, dieputenv()
Funktion mit aufrufenp
und dann die Verbindung trennen mitq
:Beachten Sie, dass der Debugger den Prozess anhält. Daher müssen Sie Compositing-Fenstermanagern nur von einer anderen Tty (virtuellen Konsole) oder über SSH aus eine Verbindung herstellen, da der Bildschirm sonst einfrieren würde.
Außerdem sollten Sie die von dbus-daemon verwendete Umgebung aktualisieren:
Für ältere Systeme:
quelle
while read
Methode liest ausstdin
, daher möchten Sie wahrscheinlich etwas an sie weiterleiten (zcat /etc/environment | while ...
. B. ). Dies funktioniert jedoch nicht mit in Anführungszeichen formatierten Umgebungsdateien (key="value"
)Dies ist nicht so umfassend wie die akzeptierte Antwort, aber wenn Sie Variablen in Ihren
/etc/environment
Dateien in Anführungszeichen gesetzt haben, werden beide vorherigen Methoden (dieexport $line
irgendwie verwendet werden) schief gehen und Sie erhalten Werte in Anführungszeichen.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(danke @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
quelle
sed 's/^/export /' /etc/environment
for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
set -a; source /etc/environment; set +a;
.