我正在寻找一种强大,优雅且可移植的解决方案来获取Ruby中的用户名,主机名和osname。我想创建一个文件夹结构,其设置如下:
linux/maschine1/user53, or
linux/maschine2/user53, or
windows/maschine1/user53, or
mac/supermac/superuser
用户名和主机名应该反映在linux shell上的user@computer:~$
,操作系统应该分为win
,linux
和mac
。< / p>
我找到了几种方法,使用ENV['USER'/'USERNAME']
或Etc.getLogin()
作为用户名,Socket.gethostname
作为计算机名,RUBY_PLATFORM
常量作为os-name。但是在JRuby等不同的Plattforms甚至在不同的操作系统上运行时,所有这些都有问题。
那么哪种选择最适合每个人?
谢谢!
修改
在给出答案之前,我在短时间内找到了这个解决方案。由于Buildr也可以使用Java命令,因此可以获得如下值:
os = Java.java.lang.System.getProperty('os.name')
usr = Java.java.lang.System.getProperty('user.name')
host = Java.java.net.InetAddress.getLocalHost().getHostName()
但我认为我将使用纯红宝石的方式来保持语言尽可能一致。
答案 0 :(得分:2)
不确定是否真的有一个gem可以完成所有工作,但Etc.getlogin和Socket.getshostname应该可以在我认为的平台上运行。我使用这个或变体来获取os:
require 'rbconfig'
def os
@os ||= (
host_os = RbConfig::CONFIG['host_os']
case host_os
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
:windows
when /darwin|mac os/
:macosx
when /linux/
:linux
when /solaris|bsd/
:unix
else
raise "unknown os: #{host_os.inspect}"
end
)
end
从硒宝石中剔除:https://code.google.com/p/selenium/source/browse/rb/lib/selenium/webdriver/common/platform.rb可能会提供更多灵感。