2

Ruby でユーザー名、ホスト名、および osname を取得するための、堅牢でエレガントでポータブルなソリューションを探しています。次のように設定されたフォルダー構造を作成したいと思います。

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

ユーザー名とホスト名は、Linux シェルの を反映するuser@computer:~$必要があり、オペレーティング システムは と に分割する必要がwinありlinuxますmac

ENV['USER'/'USERNAME']、またはEtc.getLogin()ユーザー名、Socket.gethostnameコンピューター名、およびRUBY_PLATFORMos-name の定数を使用して、いくつかのアプローチを見つけました。しかし、それらはすべて、JRuby などの異なるプラットフォームで実行したり、異なるオペレーティング システムで実行したりすると問題が発生します。

では、それぞれに最適な選択はどれでしょうか?

ありがとう!

編集:

答えが与えられる少し前に、私はこの解決策にたどり着きました。Builder は Java コマンドも使用できるため、次のような値を取得できます。

os = Java.java.lang.System.getProperty('os.name')
usr = Java.java.lang.System.getProperty('user.name')
host = Java.java.net.InetAddress.getLocalHost().getHostName()

しかし、可能な限り言語の一貫性を保つために、純粋な Ruby の方法を使用すると思います。

4

1 に答える 1

2

本当にすべてを行う宝石があるかどうかはわかりませんが、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もう少しインスピレーションを与えるかもしれません.

于 2013-11-08T13:47:21.697 に答える