RubyプログラムでMacとWindowsで異なることをしたい。プログラムが実行されているシステムを確認するにはどうすればよいですか?
RubyプログラムでMacとWindowsで異なることをしたい。プログラムが実行されているシステムを確認するにはどうすればよいですか?
回答:
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
完璧ではありませんが、私が開発を行っているプラットフォームではうまく機能し、拡張も簡単です。
RbConfig::CONFIG["host_os"]
、OSを入手するために使用する方がよいでしょう。
(警告:@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!Addition!Rubygems最近...」と組み合わせて使用すると、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"
Config::CONFIG[‘host_os’]
か?
RbConfig::CONFIG["arch"]
irb(main):002:0> require 'rbconfig' => false
(irb):10:in
irb_binding ':廃止され廃止されたConfigの代わりにRbConfigを使用します。`そこで私はそれを使用し、RbConfig::CONFIG.each
すべての異なる値をリストしました。たぶんあなたはあなたが探しているものを見つけるのを助けるためにそこに何かを見つけることができます。
争いにさらにオプションを追加するという2番目の答えがあります。 os rubygemとそのgithubページには、関連するプロジェクトリストがあります。
'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の場合はtrue >> OS.mac?#またはOS.osx?またはOS.x? => false
Launchy gem(gem install launchy
)を試してください:
require 'launchy'
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin
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
case Config::CONFIG['host_os']
か?
RbConfig::Obsolete::CONFIG['host_os']
... +含める必要はありませんConfig
include
モジュールのタイプまたは両方のタイプを変更すると、これがベストアンサーIMOです。彼include
がモジュールをどのように作成したかに注目してください。RbConfigやConfigは必要ありません。
更新!添加!最近のRubygemsにはが付属していGem.win_platform?
ます。
わかりやすくするために、Rubygemsリポジトリの使用例とこれを使用します。
def self.ant_script
Gem.win_platform? ? 'ant.bat' : 'ant'
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」(コード)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」を返すことに注意してください!(コード)
/cygwin|mswin|mingw|bccwin|wince|emx/
RUBY_ENGINE
#=>例 「ruby」、「jruby」依存関係を気にせず、もう少しユーザーフレンドリーなものが必要な場合は、ライブラリを利用できます。具体的には、OSの提供方法が好きですOS.mac?
かOS.posix?
。プラットフォームは、さまざまなUnixプラットフォームをうまく区別できます。Platform::IMPL
戻ります、例えば。:linux、:freebsd、:netbsd、:hpux。sys-unameとsysinfoは似ています。utilinfoは非常に基本的なものであり、Windows、Mac、およびLinux以外のシステムでは失敗します。
さまざまなLinuxディストリビューションなど、特定のシステムの詳細を備えたより高度なライブラリが必要な場合は、RubyでのLinuxディストリビューションの検出に関する私の回答を参照してください。。
RUBY_PLATFORM
やRbConfig::CONFIG["host_os"]
、入力方法や入力方法へのリンクを歓迎します。コードを見ると、まだはっきりしていません。
それがWindowsまたはUnixライクなOSであるかどうかを知る必要があるときは、多くの場合、
is_unix = is_win = false
File::SEPARATOR == '/' ? is_unix = true : is_win = true
File::SEPARATOR
。Rubyで開発するのと同じように、プラットフォームをダックタイピングするのが最善です。ただし、プラットフォームがWindowsであるかどうかを知る必要がある場合は、推測するのではなく、質問してください。