Linux 上的 HOSTNAME 环境变量

Linux 上的 HOSTNAME 环境变量

在我的 Linux 机器上(具体来说是 Gentoo Linux 2.6.31),我注意到 HOSTNAME 环境变量在我的 shell 中可用,但在脚本中不可用。例如,

$ echo $HOSTNAME

返回

xxxxxxxx.com,

$ ruby -e 'puts ENV["HOSTNAME"]'

返回

nil

另一方面,例如,USER 环境变量在 shell 和脚本中都可用。

我注意到当我输入时出现的环境变量列表中出现了 USER

export

IE,

declare -x USER="infogrind"

但 HOSTNAME 没有。我怀疑问题与此有关。

我的问题:1)如何使 HOSTNAME 在脚本中可用,2)为了更好地理解,这个变量最初在哪里设置,为什么它没有“导出”?

答案1

$HOSTNAME是自动设置的 Bash 变量(而不是在启动文件中)。Ruby 可能sh为其 shell 运行,并且不包含该变量。您没有理由不能自己导出它。

bash$ echo $HOSTNAME
foobar
bash$ sh -c 'echo $HOSTNAME'

bash$ export HOSTNAME
bash$ sh -c 'echo $HOSTNAME'
foobar

您可以将导出命令添加到您的某个启动文件中,例如~/.bashrc

在 Ruby 中(显示 irb):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"

答案2

准确地说,HOSTNAME它是一个 Bash 变量,但它不是 Bash环境变量(即没有传入环境到子进程)。可以通过查看env输出来检查这一点:

/tmp$ echo $BASH_VERSION
5.2.21(1)-release
/tmp$ echo $HOSTNAME
wheleph-mbp.local
/tmp$ env | grep HOSTNAME
/tmp$

ENV["HOSTNAME"]环境传递给 Ruby 解释器,因此无法HOSTNAME在那里找到。

相关内容