92

私の Ruby プログラムは、Windows と Mac で異なることをしたいと思っています。自分のプログラムがどのシステムで実行されているかを調べるにはどうすればよいですか?

4

11 に答える 11

151

定数を使用し、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

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

于 2008-10-04T21:17:49.323 に答える
17

また

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

また

irb(main):004:0> RUBY_PLATFORM
=> "i686-linux"
于 2008-10-04T20:41:57.993 に答える
11

争いに選択肢を追加するという 2 番目の答えがあります。 os ruby​​gemとそのgithub ページには、関連するプロジェクトのリストがあります。

「OS」が必要

>> OS.windows?
=> true # または OS.doze?

>> OSビット
=> 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 の場合は true

>> OS.mac? #またはOS.osx?またはOS.x?
=>偽
于 2014-01-13T02:28:00.447 に答える
7

Launchy gemgem install launchy)を試してください:

require 'launchy'
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin 
于 2008-10-05T00:18:39.740 に答える
4
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
于 2012-10-17T15:22:08.743 に答える
2

これまでのところ、次のコードでかなりうまくいっています

  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
于 2016-01-19T16:09:43.047 に答える