
Я могу установить переменные окружения, которые будут наследоваться всеми процессами в ~/.profile
. Это работает, потому что среда рабочего стола (например, gnome-shell) запускает этот файл при входе в систему. Затем gnome-shell обновляет свои собственные переменные окружения. Поскольку каждый процесс (firefox, xterm, emacs) имеет gnome-shell в качестве предка, они наследуют эти переменные окружения.
Есть ли способ обновить переменные среды в этом процессе (gnome-shell) после входа в систему? Я представляю себе что-то вроде
$ xdg-set FOO=BAR
то в новом терминале вы сразу увидите
$ echo $FOO
BAR
решение1
Окружение передается новому процессу аналогично аргументам командной строки: они копируются в адресное пространство нового процесса. Они не передаются «по ссылке», поэтому изменение в окружении некоторого процесса-предка не отражается в процессах-потомках.
Это означает, что вы можете изменить среду процесса, только манипулируя самим процессом, и только если процесс предлагает средства для этого, например, устанавливая переменную в оболочке. Это изменение среды затем обычно отражается в любых дочерних процессах, которые может породить процесс.