系统
我在硬件设备上有一个 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 启动的进程而言始终可用。如果没有这个功能,需要该信息的进程将需要启动外部工具来获取该信息。因此,这些内置变量的好处是为需要该信息的进程带来便利和性能。
相比之下,dash
Ubuntu 中用于启动进程并链接到的精简版 shellsh
则不是提供这些变量。在此 shell 下运行的应用程序需要依赖外部工具来获取该信息。
$HOSTNAME
包含主机名,并$HOSTTYPE
标识系统硬件。
答案2
因为你标记了这个狂欢,这些由 bash 设置。请参阅5.2 Bash 变量:
这些变量由 Bash 设置或使用,但其他 shell 通常不会特殊处理它们。
...
主机名
当前主机的名称。
主机类型
描述 Bash 所运行的机器的字符串。
Bash 从哪里获取信息?我认为它调用uname()
对于这些。