Ответы:
/etc/environment
Обновление будет работать только на следующей сессии, она автоматически не перезагружается.
Это означает, что вы не можете изменить его для сеансов, которые уже начались для других пользователей.
Если вы хотите «перезагрузить» все, что находится в, /etc/environment
вам нужна следующая команда:
source /etc/environment
Но опять же, это будет работать только для вашего текущего сеанса, другие пользователи не будут затронуты, пока они не начнут новый сеанс или не выполнят вышеуказанную команду в своем собственном сеансе.
Эти файлы конфигурации, будь то глобальные ( /etc/environment
, /etc/profile
) или пользовательские ( ~/.profile
, ~/.bashrc
), обрабатываются только при следующем входе в систему / сеансе.
В глобальных файлах применяются ко всем пользователям ( а не только корень) ... но вы должны перезапустить сеанс регистрации , чтобы увидеть изменения , отраженные в окружающей среде. Это может произойти, позвонив, su
как вы заметили ... или выйдя из системы, перезагрузившись. Вы можете su
обратиться к некорневому пользователю, и вы увидите, что у него также есть изменения среды.
Причина, по которой вам нужно перезагрузиться или войти снова, чтобы получить глобальную среду, заключается в том, что среда наследуется от родительских процессов, а корневой процесс для всего остального, что вы запускаете, - это ваша оболочка входа в систему ... так что если ваша оболочка входа не имеет среда ... тогда и процессы не запускаются в оболочке входа в систему. Конечно, вы можете устанавливать / обновлять среду для отдельных процессов при их запуске, но вам нужно будет настроить среду для оболочки входа в систему и перезапустить все подпроцессы, чтобы они увидели изменения.
Как кто-то еще упомянул, вам нужно перезагрузиться или выйти из системы / войти в систему, чтобы изменения были внесены /etc/profile
, /etc/profile.d/*.sh
и их /etc/environment
нужно будет забрать.
Это потому, что хотя эти файлы определяют глобальную среду ... они запускаются только один раз при входе в систему, и поэтому существующие входы / сеансы не будут отражать изменения в этих файлах. Перезагрузка «сбрасывает» логин каждого пользователя, заставляя его выбрать новую среду.
В вашем собственном сеансе входа в систему вы можете source /etc/profile
получить изменения без перезагрузки или выхода из системы / входа в систему ... но это повлияет только на ваш собственный сеанс и новые процессы, выполняющиеся в вашем сеансе.
Также обратите внимание, что в переменной нет интерполяции /etc/environment
(это не скрипт), поэтому вы не можете делать такие вещи, как PATH="$PATH:/my/custom/path"
там.
Отмечу также , что /etc/profile
и /etc/profile.d/*.sh
запускается только для сеансов входа и поэтому среда настроена не будет доступна система без входа в системе счетов (то есть , если вы пытаетесь установить переменные окружения для процесса демона , который работает за пределами вашей оболочки).
Обратите внимание, что bashrc
это не полезно для установки среды для всей оболочки входа в систему, но для оболочек bash и подпроцессов ... поэтому для истинных "глобальных" или "глобальных пользователей" вы, вероятно, захотите поместить конфигурацию своей среды в /etc/profile
или /etc/profile.d/my-custom-env.sh
или ~/.profile
. Другие оболочки (например, zsh) также имеют свои собственные файлы конфигурации, поэтому конфигурация среды, не относящейся к bash, в bashrc вызовет проблемы или путаницу, если / когда вы переключите оболочки (или если другие пользователи в системе будут использовать другие оболочки).
Распространенной проблемой является установка новой программы, и для ее правильной работы необходимо указать некоторую среду. Глобальная среда - это один из ответов, но часто требуется перезагрузка, которая не идеальна для серверов и случаев автоматического обеспечения / настройки. Вы должны спросить себя, действительно ли это переменная, которая нужна всем пользователям и программам в системе, или это действительно просто то, что вам нужно сделать доступным для конкретного пользователя или программы.
Посмотрите на включение среды в профиле или bashrc в домашнем каталоге пользователя (например ~/.profile
~/.bashrc
), в зависимости от того, хотите ли вы это для интерактивных, оболочек входа в систему, только для bash и т. д.
Имейте в виду, что это также требует перезагрузки или выхода из системы / входа в систему, чтобы изменения среды были доступны для всех процессов в сеансе входа пользователя в систему. Пользователь может source ~/.profile
... но это делается в терминале и обновляет только среду в этом терминальном сеансе и дочерних процессах ... не обязательно для всей среды входа пользователя в систему.
Одним из них является просто предоставить среду при запуске команды:
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
Если вы используете Systemd вы можете также указать среду , в файле блок / услуг в соответствии [Service]
сEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
Эта опция может показаться неуклюжей, потому что вы должны указывать среду каждый раз, когда запускаете программу, но если среда действительно нужна только этой программе ... это действительно лучший способ, и вы должны к этому привыкнуть, а не выкидывать все в bashrc или файл профиля.
Если вы не используете systemd или init для настройки среды и запуска программы ... тогда, конечно, вы также можете просто обернуть выполнение программы скриптом bash, где вы сохраните полную команду, включая настройку среды, для удобства.
Здесь также есть очень подробный ответ, который я предлагаю вам прочитать: /ubuntu//a/247769/824160
создать собственный сценарий оболочки под
/etc/profile.d/
добавьте свои глобальные переменные среды в созданный скрипт, перезагрузите компьютер, и тогда он будет доступен всем
Добавление переменной /etc/environment
для меня сработало.
Однако мне пришлось перезагрузиться после изменения, /etc/environment
чтобы изменения вступили в силу. Простого закрытия и повторного открытия окна терминала было недостаточно.
source /etc/environment
чтобы перезагрузить его.