RubyプログラムがWindowsとMacで異なることをしたいのですが、どのシステムでプログラムが実行されているかを知るにはどうすればよいですか?
使用 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
それは完璧ではありませんが、私が開発を行っているプラットフォームでうまく機能し、拡張するのに十分簡単です。
(警告:@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'
どちらか
irb(main):002:0> require 'rbconfig'
=> true
irb(main):003:0> Config::CONFIG["Arch"]
=> "i686-linux"
または
irb(main):004:0> Ruby_PLATFORM
=> "i686-linux"
2番目の答えがあります。これには、さらに多くのオプションを追加します。 os rubygem 、および 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
Launchy gemを試す(gem install launchy
):
require 'launchy'
Launchy::Application.new.Host_os_family # => :windows, :darwin, :nix, or :cygwin
更新!さらに!Rubygemsは現在、 Gem.win_platform?
。
Rubygemsリポジトリの使用例 、およびこれを明確にするために:
def self.ant_script
Gem.win_platform? ? 'ant.bat' : 'ant'
end
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
これまでのところ、次のコードでかなり良い結果を出しています
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
すでに多少処理されているほとんどのRubyインストールで簡単にアクセスできるものについては、これらをお勧めします。
Gem::Platform.local.os
#=>例。 「mingw32」、「Java」、「linux」、「cygwin」、「aix」、「dalvik」( code )Gem.win_platform?
#=>例。 true、false( コード )これらと、私が知っている他のすべてのプラットフォームチェックスクリプトは、これらの基礎となる変数の解釈に基づいています。
RbConfig::CONFIG["Host_os"]
#=>例。 "linux-gnu"(コード 1 、 2 )RbConfig::CONFIG["Arch"]
#=>例。 「i686-linux」、「i386-linux-gnu」( Rubyインタープリターがコンパイルされるときのパラメーター )として渡されます)Ruby_PLATFORM
#=>例。 「i386-linux-gnu」、「darwin」-これはJRubyで「Java」を返すことに注意してください!( code )/cygwin|mswin|mingw|bccwin|wince|emx/
Ruby_ENGINE
#=>例。 「ルビー」、「ジュルビー」ライブラリは、依存関係を気にせず、もう少し使いやすいものが必要な場合に使用できます。具体的には、[〜#〜] os [〜#〜]はOS.mac?
またはOS.posix?
。 プラットフォームは、さまざまなUnixプラットフォームを区別できます。 Platform::IMPL
は戻ります。 :linux、:freebsd、:netbsd、:hpux。 sys-unameおよびsysinfoも同様です。 tilinfoは非常に基本的なものであり、Windows、Mac、Linux以外のシステムでは失敗します。
さまざまなLinuxディストリビューションなど、特定のシステムの詳細を備えたより高度なライブラリが必要な場合は、 RubyでのLinuxディストリビューションの検出 の回答を参照してください。