【发布时间】:2010-09-14 04:08:07
【问题描述】:
我需要获取运行 Ruby 脚本的主机的完全扩展主机名。在 Perl 中,我使用了 Sys::Hostname::Long 并取得了不错的效果。 Google 似乎建议我应该在 ruby 中使用 Socket.hostname,但这只是返回节点名,而不是完整的主机名。
【问题讨论】:
我需要获取运行 Ruby 脚本的主机的完全扩展主机名。在 Perl 中,我使用了 Sys::Hostname::Long 并取得了不错的效果。 Google 似乎建议我应该在 ruby 中使用 Socket.hostname,但这只是返回节点名,而不是完整的主机名。
【问题讨论】:
hostname = Socket.gethostbyname(Socket.gethostname).first
不推荐,只有在正确设置反向 DNS 解析时才有效。如果需要,This Facter bug 有更长的解释。
如果您阅读因子代码,您会注意到它们有点sidestep the issue altogether by saying:
fqdn = hostname + domainname
地点:
hostname = %[hostname]
domainname = %[hostname -f] # minus the first element
这是一个合理的假设,不依赖于 DNS 的设置(可能在盒子外部)。
【讨论】:
可以简单一点 => 主机名 = Socket.gethostname
【讨论】:
这似乎有效:
hostname = Socket.gethostbyname(Socket.gethostname).first
【讨论】:
$ruby -e 'puts Socket.gethostbyname(Socket.gethostname).first' xin.local 与 bash 'hostname' 命令 $ hostname XIN.local 形成对比