HOSTNAME 和 HOSTTYPE 的特殊环境变量从何而来?

HOSTNAME 和 HOSTTYPE 的特殊环境变量从何而来?

系统

我在硬件设备上有一个 Ubuntu-20.04 LTS Live Server 映像

要求

我希望将容器的主机名设置为与硬件设备的主机名完全相同

按下TAB自动完成功能后$HOS,会在终端中发现两个环境变量:

  • HOSTNAME
  • HOSTTYPE

这些变量的有趣之处在于它们均未在以下位置找到:

  • printenv
  • /etc/environment
  • /etc/bash.bashrc

不幸的是,这使得 Docker 容器无法访问它们。

我很好奇,如果这些变量不是环境变量标准文件的一部分,那么它们来自哪里?

答案1

这两个变量都是 bash shell 的内置变量,Ubuntu 中 bash shell 用于交互式 shell。这意味着它们存在于任何正在运行的 bash shell 中,并且它们的值在bash加载时设置。

它们的目的是使这些信息对于从 shell 启动的进程而言始终可用。如果没有这个功能,需要该信息的进程将需要启动外部工具来获取该信息。因此,这些内置变量的好处是为需要该信息的进程带来便利和性能。

相比之下,dashUbuntu 中用于启动进程并链接到的精简版 shellsh不是提供这些变量。在此 shell 下运行的应用程序需要依赖外部工具来获取该信息。

$HOSTNAME包含主机名,并$HOSTTYPE标识系统硬件。

答案2

因为你标记了这个,这些由 bash 设置。请参阅5.2 Bash 变量

这些变量由 Bash 设置或使用,但其他 shell 通常不会特殊处理它们。

...

主机名

当前主机的名称。

主机类型

描述 Bash 所运行的机器的字符串。

Bash 从哪里获取信息?我认为它调用uname()对于这些。

相关内容