如何在Ruby中获取当前主机的FQDN?

14

我需要获取我的Ruby脚本运行的主机的完全扩展主机名。 在Perl中,我使用了Sys :: Hostname :: Long取得了很好的结果。 Google似乎建议我在ruby中使用Socket.hostname,但这只返回节点名称,而不是完整的主机名。

3个回答

20

这似乎是有效的:

hostname = Socket.gethostbyname(Socket.gethostname).first 

在 Mac OS X 上,似乎使用以下命令会以小写返回主机名: $ruby -e 'puts Socket.gethostbyname(Socket.gethostname).first' xin.local,与 bash 的 'hostname' 命令 $ hostname XIN.local 相反。 - asmaier
此解决方案自 Ruby 2.7+ 起已被弃用。 - VP.
2
那么新的解决方案是什么? - Sixtyfive

6
hostname = Socket.gethostbyname(Socket.gethostname).first

不推荐使用,只有在您的反向DNS解析正确设置后才能正常工作。如果需要,可以查看此Facter错误的更长说明。

如果您阅读facter代码,您会注意到他们通过这种方式完全回避了这个问题

fqdn = hostname + domainname

其中:

hostname = %[hostname]
domainname = %[hostname -f] # minus the first element

这是一个合理的假设,不依赖于 DNS 的设置(DNS 可能是外部的)。

2
如果机器上没有设置域名,hostname -f 命令将会查询 DNS。 - James Cape

-5

可以再简单一点 => 主机名 = Socket.gethostname


1
Socket.gethostname 不一定返回完全限定域名(FQDN)。 - dvorak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接