Linux 上的 HOSTNAME 环境变量

26 linux shell environment-variables

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

$ echo $HOSTNAME
Run Code Online (Sandbox Code Playgroud)

返回

xxxxxxxx.com,
Run Code Online (Sandbox Code Playgroud)

$ ruby -e 'puts ENV["HOSTNAME"]'
Run Code Online (Sandbox Code Playgroud)

返回

nil
Run Code Online (Sandbox Code Playgroud)

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

我注意到 USER 出现在我键入时出现的环境变量列表中

export
Run Code Online (Sandbox Code Playgroud)

IE,

declare -x USER="infogrind"
Run Code Online (Sandbox Code Playgroud)

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

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

Den*_*son 23

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

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

bash$ export HOSTNAME
bash$ sh -c 'echo $HOSTNAME'
foobar
Run Code Online (Sandbox Code Playgroud)

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

在 Ruby 中(显示 irb):

>> require 'socket'
=> true
>> Socket.gethostname
=> "bazinga"
Run Code Online (Sandbox Code Playgroud)

  • posix 标准列举了在符合 posix 的系统上您应该期望的环境变量,并且 HOSTNAME 不在列表中:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html (4认同)
  • 因此,通常最好使用`gethostname()`。 (2认同)