/etc/environment
это официально правильное место для общесистемных переменных среды. Но как я могу перезагрузить назначения в этом файле без перезагрузки или повторного входа?
Интересно, что Google не помогает мне здесь, кроме десятков сообщений в блогах, предлагающих использовать
source /etc/environment
что, очевидно, никогда не сработает, потому что /etc/environment
это список назначений (по одному на строку), а не исполняемый скрипт (отсюда и отсутствующие export
команды в /etc/environment
...).
ubuntu
environment-variables
fgysin
источник
источник
for line in $( cat /etc/environment ) ; do export $line ; done
, если формат файлаkey=value
.export
...export
будет необходимо ... (без нее это просто обычный переменная окружения в текущей оболочке, недоступна в дочерних процессах)Ответы:
Одна вещь, в которой вы ошибаетесь, это то, что
/etc/environment
для перезагрузки требуется перезагрузка. Это неверно Единственный раз, когда файл читается, это при входе в систему , когда активируется стек PAM, в частностиpam_env.so
, который читает файл.Выход из системы и повторный вход будут применять изменения - и на самом деле вы должны сделать это, если хотите, чтобы все ваши процессы получили новую среду . Все остальные «решения» 2 будут применять среду только к одному процессу оболочки, но не ко всему, что вы запускаете через графический интерфейс, включая новые окна терминала. 1
Однако, если вы согласны с этим - отсутствие
export
команд можно компенсировать с помощьюset -a
иset +a
. Тем не менее, это все еще плохой способ, поскольку файл также не использует кавычки. Но это должно работать нормально:1 GNOME Session Manager предоставляет способ изменить свою собственную среду, но только на
Initialization
этапе:2
gdb
не является решением, но иногда может использоваться. Вы должны прикрепить его к запущенным процессам вашего менеджера сеансов (напримерgnome-session
), вашего оконного менеджера (например,gnome-shell
илиopenbox
), панели задач / панели, если таковые имеются (напримерxfce4-panel
), и вообще ко всему, что, возможно, могло бы запустить вещи. Для каждого из этих процессов вам нужно присоединитьсяgdb
к нему с помощью PID, вызватьputenv()
функцию с помощьюp
, а затем отключить с помощьюq
:Обратите внимание, что отладчик приостанавливает процесс, поэтому вы должны подключаться к оконным менеджерам композитинга только из другого tty (виртуальной консоли) или через SSH, иначе экран зависнет.
В дополнение к этому, вы также должны обновить среду, используемую dbus-daemon:
Для старых систем:
источник
while read
Метод читаетstdin
, так что вы , вероятно , хотите что - то трубы к нему (напримерcat /etc/environment | while ...
). Но это не будет работать с файлами среды, отформатированными вkey="value"
Это не так исчерпывающе, как принятый ответ, но если вы указали переменные в своих
/etc/environment
файлах в кавычках, оба предыдущих метода (которыеexport $line
каким-либо образом используют ) пойдут не так, и вы получите кавычки.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(спасибо @ Тим-Джонс):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
источник
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;
.