2008-10-04 18 views
71

मैं चाहता हूं कि मेरा रूबी प्रोग्राम विंडोज़ की तुलना में मैक पर अलग-अलग चीजें करे। मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम किस सिस्टम पर चल रहा है?मैं कैसे देख सकता हूं कि मेरा रूबी प्रोग्राम किस ऑपरेटिंग सिस्टम पर चल रहा है?

उत्तर

15

या तो

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

या

irb(main):004:0> RUBY_PLATFORM 
=> "i686-linux" 
+1

आप 'कॉन्फ़िग :: config [ 'host_os']' इसका मतलब यह नहीं है? –

+3

"अप्रचलित और बहिष्कृत कॉन्फ़िगर के बजाय आरबीकॉन्फिग का उपयोग करें" => '' '' आरबीकॉन्फिग :: कॉन्फिग ["आर्क"] '' – jtzero

+1

@jtzero यदि आप टिप्पणियों में अधिक पूर्ण उत्तर प्रदान करते हैं तो मैं 2008 में लिखे गए उत्तर को अपडेट करता हूं –

121

इसे और अधिक अनुकूल बनाने के लिए 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 
end 

यह सही नहीं है, लेकिन प्लेटफार्मों के लिए अच्छी तरह से काम करता है जो मैं विकास करता हूं, और विस्तार करना काफी आसान है।

+7

एक मामला जहां यह काम नहीं करेगा यदि आप jruby का उपयोग कर रहे हैं।Jruby के लिए –

+6

, आप अपने ओएस प्राप्त करने के लिए 'RbConfig :: CONFIG [" host_os "]' का उपयोग करके बेहतर हैं। – Pred

+2

क्या कहीं भी ऐसा कुछ है जहां इस तरह की चीज एक मणि में पैक की जाती है, जिसका उपयोग प्रतिलिपि/चिपकाने या इसके बजाए किया जा सकता है? यदि हां, तो कहाँ? :) – lindes

6

Launchy मणि (gem install launchy) का प्रयास करें:

require 'launchy' 
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin 
+0

यह लॉन्च है :: Application.new.host_os_family 2.1.0 में। – fakeleft

+0

एफवाईआई - लॉन्ची आरबी कॉन्फिग का उपयोग करता है: https://github.com/copiousfreetime/launchy/blob/master/lib/launchy/detect/host_os.rb – codecraig

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 
+0

मुझे लगता है कि यह 'कॉन्फ़िगर :: कॉन्फिग [' host_os '] होना चाहिए ' – equivalent8

+0

वास्तव में रूबी 2 में यह होना चाहिए 'आरबीकॉन्फिग :: अप्रचलित :: CONFIG [' host_os '] '... +' config' – equivalent8

+0

'शामिल करने की आवश्यकता नहीं है' शामिल 'या दोनों प्रकार के मॉड्यूल बदलें, और फिर यह है सबसे अच्छा जवाब आईएमओ। ध्यान दें कि उन्होंने मॉड्यूल को कैसे शामिल किया था, इसलिए RbConfig या Config की आवश्यकता नहीं है। – Pred

-3

जब मैं सिर्फ अगर यह एक विंडोज या यूनिक्स की तरह ओएस

is_unix = is_win = false 
File::SEPARATOR == '/' ? is_unix = true : is_win = true 
के लिए यह अक्सर पर्याप्त है पता करने की जरूरत
+1

फ़ाइल :: SEPARATOR विंडोज़ में देता है, इसलिए यह – peter

+2

काम नहीं करता है। अगर आप जानना चाहते हैं कि फ़ाइल विभाजक क्या है, तो 'फ़ाइल :: SEPARATOR' का उपयोग करें। रुबी में विकास की तरह मंच को बताने के लिए सबसे अच्छा है। लेकिन अगर आपको पता होना है कि मंच विंडोज है या नहीं, तो इसका अनुमान लगाने के बजाय सवाल पूछें। –

17

(चेतावनी: @ पीटर वैगनेट की टिप्पणी पढ़ें) मुझे यह पसंद है, अधिकांश लोग 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 nowadays..." साथ संयोजन के रूप में उपयोग कम करने के लिए जब Gem::Platform.local.os == 'java'

+3

jruby पर यह सिर्फ "जावा" की रिपोर्ट करता है, इसलिए यदि आप किसी को भी जुर्बी चलाने की उम्मीद करते हैं तो यह पर्याप्त नहीं है। –

6

मैं मैदान के लिए और अधिक विकल्प जोड़ने के लिए एक दूसरे सवाल का जवाब है,। The os rubygem, और github page में संबंधित परियोजना सूची है।

 
require 'os' 

>> OS.windows? 
=> true # or OS.doze? 

>> OS.bits 
=> 32 

>> OS.java? 
=> true # if you're running in jruby. Also OS.jruby? 

>> OS.ruby_bin 
=> "c:\ruby18\bin\ruby.exe" # or "/usr/local/bin/ruby" or what not 

>> OS.posix? 
=> false # true for linux, os x, cygwin 

>> OS.mac? # or OS.osx? or OS.x? 
=> false 
0

हम निम्नलिखित कोड

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 
4

अद्यतन के साथ अब तक काफी अच्छा कर रहे हैं! इसके अलावा! रूबीगेम्स आजकल Gem.win_platform? के साथ जहाज।

Example usages in the Rubygems repo, और यह एक, स्पष्टता के लिए:

def self.ant_script 
    Gem.win_platform? ? 'ant.bat' : 'ant' 
end 
संबंधित मुद्दे

 संबंधित मुद्दे