[ruby] Ruby 프로그램이 실행중인 운영 체제를 어떻게 찾을 수 있습니까?

내 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"

업데이트 와 함께 사용하는 “업데이트! 추가! 젬 요즘 …” 때 완화하는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"


답변

나는 싸움에 더 많은 옵션을 추가하기 위해 두 번째 대답이 있습니다.
os rubygemgithub 페이지 에는 관련 프로젝트 목록이 있습니다.

'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.mac? # 또는 OS.osx? 또는 OS.x?
=> 거짓


답변

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


답변

최신 정보! 부가! Rubygems는 요즘 Gem.win_platform?.

명확성을 위해 Rubygems 리포지토리 및이 리포지토리의 사용 예 :

def self.ant_script
  Gem.win_platform? ? 'ant.bat' : 'ant'
end