2008-09-30 33 views
13

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

回答

20

这似乎工作:

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

在Mac OS X上,这似乎以小写字母返回主机名:`$ ruby​​ -e'将Socket.gethostbyname(Socket.gethostname).first'xin.local`与bash'hostname'命令`$ hostname XIN.local` – asmaier 2014-05-19 12:29:31

-5

可能是一点点简单=>主机名= Socket.gethostname

+1

Socket.gethostname不一定会返回FQDN。 – dvorak 2009-12-04 00:41:51

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

不建议,如果您的反向DNS解析被正确设定只会工作向上。如果需要,This Facter bug有更长的解释。

如果你读了facter代码,你会发现,他们有些sidestep the issue altogether by saying

fqdn = hostname + domainname 

其中:

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

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

+0

+1,这将至少适用于* nix衍生物 – Shirkrin 2012-08-21 05:55:57