Ich kann Umgebungsvariablen so einstellen, dass sie von allen Prozessen in übernommen werden ~/.profile
. Das funktioniert, weil die Desktop-Umgebung (z. B. Gnome-Shell) diese Datei beim Anmelden ausführt. Gnome-Shell aktualisiert dann seine eigenen Umgebungsvariablen. Da jeder Prozess (Firefox, Xterm, Emacs) Gnome-Shell als Vorgänger hat, erben sie diese Umgebungsvariablen.
Gibt es eine Möglichkeit, die Umgebungsvariablen in diesem Prozess (Gnome-Shell) nach dem Login zu aktualisieren? Ich stelle mir so etwas vor wie
$ xdg-set FOO=BAR
dann können Sie in einem neuen Terminal sofort sehen
$ echo $FOO
BAR
Antwort1
Die Umgebung wird auf ähnliche Weise an einen neuen Prozess übergeben wie die Befehlszeilenargumente: Sie werden in den Adressraum des neuen Prozesses kopiert. Sie werden nicht „per Referenz“ übergeben, sodass eine Änderung der Umgebung eines Vorgängerprozesses nicht in den Nachfolgerprozessen widergespiegelt wird.
Das heißt, Sie können die Umgebung eines Prozesses nur ändern, indem Sie den Prozess selbst manipulieren und nur, wenn der Prozess eine Möglichkeit dazu bietet, z. B. durch Festlegen einer Variablen in einer Shell. Diese Änderung der Umgebung wird dann normalerweise in allen untergeordneten Prozessen widergespiegelt, die der Prozess möglicherweise erzeugt.