Откуда берутся специальные переменные среды HOSTNAME и HOSTTYPE?

Откуда берутся специальные переменные среды HOSTNAME и HOSTTYPE?

Система

У меня есть образ 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()для этих.

Связанный контент