web-dev-qa-db-ja.com

Rubyプログラムが実行されているオペレーティングシステムを見つけるにはどうすればよいですか?

RubyプログラムがWindowsとMacで異なることをしたいのですが、どのシステムでプログラムが実行されているかを知るにはどうすればよいですか?

81
Huluk

使用 Ruby_PLATFORM定数、およびオプションでモジュールにラップしてより使いやすくします。

module OS
  def OS.windows?
    (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ Ruby_PLATFORM) != nil
  end

  def OS.mac?
   (/darwin/ =~ Ruby_PLATFORM) != nil
  end

  def OS.unix?
    !OS.windows?
  end

  def OS.linux?
    OS.unix? and not OS.mac?
  end

  def OS.jruby?
    Ruby_ENGINE == 'jruby'
  end
end

それは完璧ではありませんが、私が開発を行っているプラ​​ットフォームでうまく機能し、拡張するのに十分簡単です。

133
Aaron Hinni

(警告:@Peter Wagenetのコメントを読んでください)私はこれが好きです、ほとんどの人は rubygems を使用しています。

irb(main):001:0> Gem::Platform.local
=> #<Gem::Platform:0x151ea14 @cpu="x86", @os="mingw32", @version=nil>
irb(main):002:0> Gem::Platform.local.os
=> "mingw32"

update"Update!Addition!Rubygems nowadays ..." と組み合わせて使用​​すると、Gem::Platform.local.os == 'Java'

22
jtzero

どちらか

irb(main):002:0> require 'rbconfig'
=> true
irb(main):003:0> Config::CONFIG["Arch"]
=> "i686-linux"

または

irb(main):004:0> Ruby_PLATFORM
=> "i686-linux"
16
Vinko Vrsalovic

2番目の答えがあります。これには、さらに多くのオプションを追加します。 os ruby​​gem 、および githubページ には関連プロジェクトリストがあります。

 require 'os' 
 
 >> OS.windows?
 => true#またはOS.doze?
 
> > OS.bits 
 => 32 
 
 >> OS.java?
 => true#jrubyで実行している場合。 OS.jruby?
 
 >> OS.Ruby_bin 
 => "c:\ Ruby18\bin\Ruby.exe"#または "/ usr/local/bin/Ruby 「または何ではない
 
 >> OS.posix?
 => false#linux、os x、cygwin 
 
 >> OSの場合はtrue 。マック? #またはOS.osx?またはOS.x?
 => false 
8
jtzero

Launchy gemを試すgem install launchy):

require 'launchy'
Launchy::Application.new.Host_os_family # => :windows, :darwin, :nix, or :cygwin 
6
Ryan McGeary

更新!さらに!Rubygemsは現在、 Gem.win_platform?

Rubygemsリポジトリの使用例 、およびこれを明確にするために:

def self.ant_script
  Gem.win_platform? ? 'ant.bat' : 'ant'
end
4
olleolleolle
require 'rbconfig'
include Config

case CONFIG['Host_os']
  when /mswin|windows/i
    # Windows
  when /linux|Arch/i
    # Linux
  when /sunos|solaris/i
    # Solaris
  when /darwin/i
    #MAC OS X
  else
    # whatever
end
4
pisaruk

これまでのところ、次のコードでかなり良い結果を出しています

  def self.windows?
    return File.exist? "c:/WINDOWS" if Ruby_PLATFORM == 'Java'
    Ruby_PLATFORM =~ /mingw32/ || Ruby_PLATFORM =~ /mswin32/
  end

  def self.linux?
    return File.exist? "/usr" if Ruby_PLATFORM == 'Java'
    Ruby_PLATFORM =~ /linux/
  end

  def self.os
    return :linux if self.linux?
    return :windows if self.windows?
    nil
  end
1
adamliesko

すでに多少処理されているほとんどのRubyインストールで簡単にアクセスできるものについては、これらをお勧めします。

  1. Gem::Platform.local.os#=>例。 「mingw32」、「Java」、「linux」、「cygwin」、「aix」、「dalvik」( code
  2. Gem.win_platform?#=>例。 true、false( コード

これらと、私が知っている他のすべてのプラットフォームチェックスクリプトは、これらの基礎となる変数の解釈に基づいています。

  1. RbConfig::CONFIG["Host_os"]#=>例。 "linux-gnu"(コード 12
  2. RbConfig::CONFIG["Arch"]#=>例。 「i686-linux」、「i386-linux-gnu」( Rubyインタープリターがコンパイルされるときのパラメーター )として渡されます)
  3. Ruby_PLATFORM#=>例。 「i386-linux-gnu」、「darwin」-これはJRubyで「Java」を返すことに注意してください!code
    • これらはすべてWindowsのバリアントです:/cygwin|mswin|mingw|bccwin|wince|emx/
  4. Ruby_ENGINE#=>例。 「ルビー」、「ジュルビー」

ライブラリは、依存関係を気にせず、もう少し使いやすいものが必要な場合に使用できます。具体的には、[〜#〜] os [〜#〜]OS.mac?またはOS.posix?プラットフォームは、さまざまなUnixプラットフォームを区別できます。 Platform::IMPLは戻ります。 :linux、:freebsd、:netbsd、:hpux。 sys-unameおよびsysinfoも同様です。 tilinfoは非常に基本的なものであり、Windows、Mac、Linux以外のシステムでは失敗します。

さまざまなLinuxディストリビューションなど、特定のシステムの詳細を備えたより高度なライブラリが必要な場合は、 RubyでのLinuxディストリビューションの検出 の回答を参照してください。

0
sondra.kinsey