HOSTNAME 和 HOSTTYPE 的特殊環境變數從何而來?

HOSTNAME 和 HOSTTYPE 的特殊環境變數從何而來?

系統

我的硬體設備上有一個 Ubuntu-20.04 LTS Live Server 映像

要求

我希望將容器的主機名稱設定為與硬體設備的主機名稱完全相同

當按下TAB自動完成按鈕時$HOS,會在終端機中發現兩個環境變數:

  • HOSTNAME
  • HOSTTYPE

這些變數的有趣之處在於它們在以下位置都找不到:

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

不幸的是,Docker 容器無法存取它們。

我很好奇如果這些變數不是環境變數標準文件的一部分,它們來自哪裡?

答案1

這兩個變數都是 bash shell 的內建變量,bash shell 在 Ubuntu 中用於互動式 shell。這意味著它們存在於任何正在運行的 bash shell 中,並且它們的值在bash載入時設定。

它們的目的是使該資訊立即且始終可用於從 shell 啟動的進程。如果沒有這個,需要該資訊的進程將需要啟動外部工具來獲取該資訊。因此,這些內建變數的好處是為需要該資訊的進程提供便利和效能。

相較之下,dashUbuntu 中用於啟動進程並符號連結到的更精簡的 shellsh確實不是提供這些變數。在此 shell 下執行的應用程式需要依賴外部工具來取得該資訊。

$HOSTNAME包含主機名,並$HOSTTYPE標識系統硬體。

答案2

既然你標記了這個,這些是由 bash 設定的。看5.2 Bash 變數

這些變數由 Bash 設定或使用,但其他 shell 通常不會特別對待它們。

主機名稱

目前主機的名稱。

主機類型

描述運行 Bash 的機器的字串。

Bash 從哪裡獲取資訊?我認為它調用uname()對於這些。

相關內容