4

У меня есть следующее в моей /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:

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

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

3 ответа3

1

Поскольку инструменты 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.

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/ (как описано здесь), и это сработало.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .