Ruby / Buildr获取用户,主机和操作系统名称

时间:2013-11-08 12:35:52

标签: ruby buildr

我正在寻找一种强大,优雅且可移植的解决方案来获取Ruby中的用户名,主机名和osname。我想创建一个文件夹结构,其设置如下:

linux/maschine1/user53, or
linux/maschine2/user53, or 
windows/maschine1/user53, or
mac/supermac/superuser

用户名和主机名应该反映在linux shell上的user@computer:~$,操作系统应该分为winlinuxmac。< / 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()

但我认为我将使用纯红宝石的方式来保持语言尽可能一致。

1 个答案:

答案 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可能会提供更多灵感。