Система
У меня есть образ Ubuntu-20.04 LTS Live Server на аппаратном устройстве.
Требования
Я хочу установить имя хоста контейнера точно таким же, как имя хоста аппаратного устройства.
При нажатии TABна кнопку автодополнения $HOS
в терминале обнаруживаются две переменные окружения:
HOSTNAME
HOSTTYPE
Интересно то, что эти переменные не встречаются ни в одном из следующих вариантов:
printenv
/etc/environment
/etc/bash.bashrc
К сожалению, это делает их недоступными для Docker-контейнеров.
Мне интересно, откуда берутся эти переменные, если они не являются частью стандартных файлов переменных окружения?
решение1
Обе переменные являются встроенными переменными оболочки bash, оболочки, которая в Ubuntu используется для интерактивных оболочек. Это означает, что они существуют в любой запущенной оболочке bash, и их значение устанавливается при bash
загрузке.
Их цель — сделать эту информацию немедленно и всегда доступной для процессов, запущенных из оболочки. Без этого процессы, которым нужна эта информация, должны были бы запускать внешние инструменты для получения этой информации. Таким образом, преимущество этих встроенных переменных — удобство и производительность для процессов, которым нужна эта информация.
Напротив, значительно облегченная dash
оболочка, используемая в Ubuntu для запуска процессов и связанная с sh
, ненетпредоставляют эти переменные. Приложения, работающие под этой оболочкой, должны полагаться на внешние инструменты для получения этой информации.
$HOSTNAME
содержит имя хоста и $HOSTTYPE
идентифицирует аппаратное обеспечение системы.
решение2
Так как вы отметили этоБаш, они устанавливаются bash. Смотрите5.2 Переменные Bash:
Эти переменные устанавливаются и используются Bash, но другие оболочки обычно не обрабатывают их особым образом.
...
ИМЯ ХОСТА
Имя текущего хоста.
ХОСТТИП
Строка, описывающая машину, на которой запущен Bash.
Откуда Баш берет информацию? Я думаю, он звонитuname()
для этих.