Установка переменной в / etc / environment не имеет никакого эффекта


5

У меня есть следующее в моем /etc/environment:

http_proxy=http://myproxy.net:12345

После перезагрузки компьютера я вхожу в систему и проверяю переменную:

root@d6c44fa03243:/# echo $http_proxy
(empty)

Почему переменная не установлена?

Примечание: я должен упомянуть, что это докер-контейнер, хотя я не понимаю, почему это будет иметь значение.

РЕДАКТИРОВАТЬ

Подробнее о системе ( Ubuntu 16.04.4 Xenial Xerus):

root@d6c44fa03243:/# uname -a
Linux d6c44fa03243 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@d6c44fa03243:/# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l

EDIT2

Согласно документации Ubuntu :

/ И т.д. / окружающая среда

Этот файл специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку.


Имеет ли значение добавление строки /etc/profile?
NKN

1
@nKn Я хочу, чтобы он был активным для всей системы, а не только для сеансов оболочки ( superuser.com/a/664237/94612 ). Но прежде чем я подумаю об обходных путях, я хотел бы понять, что происходит. Почему /etc/environmentне оценивается?
dangonfast

В соответствии с этим ответом ( superuser.com/a/664236 ): /etc/environment is not part of POSIX, it belongs to PAM (Pluggable Authentication Module), and only programs compiled with PAM support are able to use it (primarily login systems, which subsequently start the shell or user environment). This means it isn't even read by your shell..
nKn

1
@nKn Что-то противоречитThis file is specifically meant for system-wide environment variable settings
dangonfast

Ответы:


2

Поскольку инструменты UNIX созданы с учетом прозрачности , вы можете найти ответ с помощью grep. Неважно, работаете ли вы с полной ОС или контейнером (последнее означает, что вам, возможно, придется предпринять некоторые дополнительные шаги для установки инструментов, необходимых для того, чтобы вещи стали прозрачными).

Проверьте, что вы grepустановили в своей ОС и запустите sudo grep -R "/etc/environment" /etc/*. Это будет искать все системные скрипты и конфигурации, чтобы увидеть, какие из них используют этот файл. В стандартной версии ubuntu / xenial64 vagrant скрипты и конфигурации, использующие этот файл , в основном находятся в /etc/init.d/ /etc/pam.d/, и /etc/rc.*.d/.

Следующие конфигурации как переменные /etc/environmentв моей оболочке:

/etc/pam.d/login /etc/pam.d/su /etc/pam.d/sshd

От man pam_env:

Модуль pam_env PAM позволяет (не) устанавливать переменные окружения. ...

Этот модуль также может анализировать файл с простыми парами KEY = VAL в отдельных строках (по умолчанию / etc / environment). Вы можете изменить файл по умолчанию для анализа с помощью флага envfile и включить или отключить его, установив для флага readenv значение 1 или 0 соответственно. ...

Сделайте похожий поиск в вашем док-контейнере. Вы можете проверить, использует ли ваш контейнер pam_env.so.

Скорее всего, наилучшим решением будет запуск процесса создания переменных среды, /etc/environmentно этот совет дается без понимания того, что вы создаете. Использование в `/etc/rc*.d/ может быть хорошим примером того, как этого добиться.

Большинство людей следуют советам @ ben-njeri и устанавливают переменные в файлах конфигурации по умолчанию для оболочки bash .


Это отличный ответ. Это sudo grep -r /etc/environmentпомогло мне выяснить, что мне нужно изменить, /etc/pam.d/xrdp-sesmanчтобы прочитать сеансы xrdp /etc/environment.
Висбуки

0

Настройка /etc/profileили ~/.bashrcили ~/.bash_profileфайлы , экспортировать переменные всякий раз , когда запускается новая оболочка.

/etc/profile для всей системы, а другие для конкретных пользователей.

Просто добавьте строки, как показано ниже в конце:

export http_proxy=”http://myproxy.net:12345”
export ftp_proxy=”http://myproxy.net:12345”
export https_proxy=”http://myproxy.net:12345"

Таким образом, каждый раз, когда вы запускаете оболочку, переменные загружаются, и вы можете использовать их.


0

Я имел (имел) эту проблему на Ubuntu 18.04. Я вообще не мог приступить /etc/environmentк работе, но /etc/profile.d/вместо этого использовал скрипт (как описано здесь ), и это сработало.

Для получения дополнительной информации см. Мой ответ на этот связанный вопрос . Надеюсь, это поможет :)


2
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
Дейв М

@DaveM Обратите внимание, что основная часть ответа была включена сюда, и я ссылаюсь на партнерский сайт StackExchange. Я попытался сделать ответ немного более ясным с точки зрения того, что сработало, что ссылки предназначены для получения дополнительной информации, и добавил еще одну ссылку (хе).
bszom
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.