系統
我的硬體設備上有一個 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 啟動的進程。如果沒有這個,需要該資訊的進程將需要啟動外部工具來獲取該資訊。因此,這些內建變數的好處是為需要該資訊的進程提供便利和效能。
相較之下,dash
Ubuntu 中用於啟動進程並符號連結到的更精簡的 shellsh
確實不是提供這些變數。在此 shell 下執行的應用程式需要依賴外部工具來取得該資訊。
$HOSTNAME
包含主機名,並$HOSTTYPE
標識系統硬體。
答案2
既然你標記了這個巴什,這些是由 bash 設定的。看5.2 Bash 變數:
這些變數由 Bash 設定或使用,但其他 shell 通常不會特別對待它們。
…
主機名稱
目前主機的名稱。
主機類型
描述運行 Bash 的機器的字串。
Bash 從哪裡獲取資訊?我認為它調用uname()
對於這些。