আমার রুবি প্রোগ্রামটি কোন অপারেটিং সিস্টেমে চলছে তা কীভাবে খুঁজে পাব?


89

আমি চাই আমার রুবি প্রোগ্রামটি উইন্ডোজের চেয়ে ম্যাকের জন্য বিভিন্ন জিনিস করুক। আমার প্রোগ্রামটি কোন সিস্টেমে চলছে তা আমি কীভাবে জানতে পারি?


উত্তর:


143

RUBY_PLATFORMধ্রুবকটি ব্যবহার করুন এবং এটি আরও বন্ধুত্বপূর্ণ করতে optionচ্ছিকভাবে একটি মডিউলে মোড়ানো:

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

এটি নিখুঁত নয়, তবে যে প্ল্যাটফর্মগুলির উপরে আমি উন্নয়ন করি তার পক্ষে ভাল কাজ করে এবং এটি প্রসারিত করার পক্ষে যথেষ্ট সহজ।


8
ঝাঁকুনির জন্য, আপনি RbConfig::CONFIG["host_os"]নিজের ওএস পাওয়ার জন্য আরও ভাল ।
ফিলবট

4
কপি / পেস্টিং বা এই জাতীয় পরিবর্তে এর মতো কিছু কোনও রত্নটিতে প্যাকেজ করা হয়েছে এমন কোনও জায়গা কি আছে? যদি তাই হয় তবে কোথায়? :)
লিন্ড

4
আমি যেকোন রত্নের চেয়ে এটিকে পছন্দ করি।
সি জনসন

উইন্ডোজের একটি নির্দিষ্ট সংস্করণের জন্য আমি কি কোনও উপায় পরীক্ষা করতে পারি, উদাহরণস্বরূপ উইন্ডোজ 8.1?
সাজিদ

উইন্ডোজ বৈকল্পিক রেজেক্স বিটিডব্লিউ বন্ধ আছে, প্রতিটি নাম "|" এর জন্য প্রথম বন্ধনীতে থাকা উচিত বা প্রত্যাশিত হিসাবে কাজ করতে।
এপিজিন

24

(সতর্কতা: @ পিটার ওয়াগনেটের মন্তব্য পড়ুন) আমি এটি পছন্দ করি, বেশিরভাগ মানুষ রুবিজেম ব্যবহার করে , এটি নির্ভরযোগ্য, ক্রস প্ল্যাটফর্ম

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"

আপডেটের সাথে ব্যবহার "আপডেট করুন! সংযোজন! Rubygems আজকাল ..." যখন প্রশমিতGem::Platform.local.os == 'java'


4
ঝাঁকুনিতে এটি কেবল "জাভা" এর প্রতিবেদন করে তাই আপনার যদি কারও ঝাঁকুনি চলার আশা থাকে তবে এটি যথেষ্ট নয়।
পিটার ওয়াগনেট

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"

4
মানে না Config::CONFIG[‘host_os’]?
অ্যান্ড্রু গ্রিম 13

4
"অপ্রচলিত এবং অবহেলিত কনফিগারেশনের পরিবর্তে আরবিকনফিগ ব্যবহার করুন" =>RbConfig::CONFIG["arch"]
jtzero

4
@ জেটজারো যদি আপনি মন্তব্যগুলিতে আরও সম্পূর্ণ উত্তর সরবরাহ করেন তবে আমি ২০০৮ সালে লেখা উত্তরটি আপডেট করব
ভিঙ্কো ভার্সালভিক

রুবি ১.৯.৩ (পি 327) এর ঠিক সেই রেখায়, রুবি এটি ডিফল্টরূপে আছেirb(main):002:0> require 'rbconfig' => false
jtzero

যখন আমি এটি করেছি, আমি একটি বিবৃতি পেয়েছিলাম যা অবহেলিত ছিল। (irb):10:in irb_binding ': অপ্রচলিত এবং অবহেলিত কনফিগারেশনের পরিবর্তে আরবিকনফিগ ব্যবহার করুন `সুতরাং আমি এটি ব্যবহার করেছি RbConfig::CONFIG.eachএবং সমস্ত ভিন্ন মান তালিকাভুক্ত করেছি। আপনি যা খুঁজছেন তা পেতে আপনাকে সেখানে কিছু পেতে পারেন।
ফিলবুট

10

লড়াইয়ে আরও বিকল্প যুক্ত করতে আমার একটি দ্বিতীয় উত্তর আছে। ওস রুবিজেম এবং তাদের গিথুব পৃষ্ঠায় সম্পর্কিত প্রকল্পগুলির তালিকা রয়েছে।

'ওএস' প্রয়োজন

>> ওএস.ওয়াইন্ডোস?
=> সত্য # বা OS.doze?

>> ওএস.বিটস
=> 32

>> ওএস.জভা?
=> সত্য # আপনি যদি জুরবিতে চলছেন। ওএস.জ্রুবি?

>> OS.ruby_bin
=> "সি: \ রুবি 18 \ বিন \ রুবি.এক্সই" # বা "/ ইউএসআর / লোকাল / বিন / রুবি" বা কী না

>> ওএস.পোসিক্স?
=> লিনাক্স, ওএস এক্স, সিগউইনের ক্ষেত্রে # মিথ্যা

>> ওএস.ম্যাক? # বা OS.osx? বা ওএস.এক্স?
=> মিথ্যা

7

লঞ্চি রত্নটি চেষ্টা করুন ( gem install launchy):

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

এটি ২.১.০-তে লঞ্চি: :: অ্যাপ্লিকেশন.নো.হোস্ট_স_ফ্যামিলি।
ফেকলিফ্ট

4
এফওয়াইআই - লঞ্চি rbconfig ব্যবহার করেছে: github.com/copiousfreetime/launchy/blob/master/lib/launchy/…
কোডেক্রেগ

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

আমার ধারণা এই হওয়া উচিত case Config::CONFIG['host_os']?
সমমান 8

আসলে রুবি 2 এটি হওয়া উচিত RbConfig::Obsolete::CONFIG['host_os'] ... অন্তর্ভুক্ত করা কোন প্রয়োজনConfig
equivalent8

includeউভয় প্রকারের মডিউল পরিবর্তন করুন এবং তারপরে এটিই সেরা উত্তর আইএমও। লক্ষ্য করুন যে তিনি কীভাবে includeমডিউল ছিলেন তাই আরবিসিফিগ বা কনফিগার করার প্রয়োজন নেই।
ফিলবট 3


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

1

আপনার জন্য ইতিমধ্যে কিছুটা প্রক্রিয়াজাত বেশিরভাগ রুবি স্থাপনায় সহজেই অ্যাক্সেসযোগ্য কোনও কিছুর জন্য, আমি এগুলি সুপারিশ করছি:

  1. Gem::Platform.local.os# => উদা। "মিংডব্লিউ 32", "জাভা", "লিনাক্স", "সাইগউইন", "আইিক্স", "ডালভিক" ( কোড )
  2. Gem.win_platform?# => উদা। সত্য, মিথ্যা ( কোড )

আমি এবং আমার পরিচিত প্রতিটি প্ল্যাটফর্মের চেক স্ক্রিপ্ট উভয়ই এই অন্তর্নিহিত ভেরিয়েবলগুলির ব্যাখ্যার উপর ভিত্তি করে:

  1. RbConfig::CONFIG["host_os"]# => উদা। "লিনাক্স-gnu" (কোড 1 , 2 )
  2. RbConfig::CONFIG["arch"]# => উদা। "i686-linux", "i386-linux-gnu" ( রুবি ইন্টারপ্রেটার সংকলন করার পরে প্যারামিটার হিসাবে পাস হয়েছে )
  3. RUBY_PLATFORM# => উদা। "i386-linux-gnu", "ডারউইন" - নোট করুন যে এটি JRuby এ "জাভা" দেয়! ( কোড )
    • এগুলি সমস্ত উইন্ডো ভেরিয়েন্ট: /cygwin|mswin|mingw|bccwin|wince|emx/
  4. RUBY_ENGINE# => উদা। "রুবি", "জুরবি"

আপনি যদি নির্ভরতা মনে না করেন এবং আরও কিছু ব্যবহারকারী-বান্ধব কিছু চান তবে গ্রন্থাগারগুলি উপলব্ধ। বিশেষ করে, অপারেটিং সিস্টেম অফার পদ্ধতি পছন্দ OS.mac?বা OS.posix?প্ল্যাটফর্ম বিভিন্ন ইউনিক্স প্ল্যাটফর্মের মধ্যে ভাল পার্থক্য করতে পারে। Platform::IMPLফিরে আসবে, যেমন। : লিনাক্স,: ফ্রিবিএসডি,: নেটবিএসডি,: এইচপিক্স। sys-uname এবং sysinfo একই রকম। ইউটিইনফো অত্যন্ত বেসিক, এবং উইন্ডোজ, ম্যাক এবং লিনাক্সের বাইরে যে কোনও সিস্টেমে ব্যর্থ হবে।

আপনি যদি বিভিন্ন লিনাক্স বিতরণের মতো নির্দিষ্ট সিস্টেমের বিশদ সহ আরও উন্নত গ্রন্থাগারগুলি চান তবে রুবিতে লিনাক্স বিতরণ সনাক্তকরণের জন্য আমার উত্তরটি দেখুন ।


আমি কিভাবে আরও ভালো ব্যাখ্যা বা লিঙ্ক স্বাগত জানাই চাই RUBY_PLATFORMবা RbConfig::CONFIG["host_os"]জনবহুল করছে। কোডটি দেখছেন, এটি এখনও আমার কাছে পরিষ্কার নয়।
sondra.kinsey

-6

আমি যখন কেবল উইন্ডোজ বা ইউনিক্স-এর মতো ওএস কিনা তা জানতে গেলে এটি প্রায়শই যথেষ্ট

is_unix = is_win = false
File::SEPARATOR == '/' ? is_unix = true : is_win = true

4
ফাইল :: SEPARATOR উইন্ডোজ দেয় / দেয় তাই এটি কাজ করে না
পিটার

4
চারিদিকে খারাপ অনুশীলন। আপনি যদি ফাইল বিভাজক কী তা জানতে চান, ব্যবহার করুন File::SEPARATOR। রুবির উন্নয়নের মতো প্ল্যাটফর্মটিকে হাঁস-টাইপ করা ভাল। প্ল্যাটফর্মটি উইন্ডোজ কিনা তা যদি আপনাকে জানতে হয় তবে এটি অনুমিত করার চেষ্টা করার পরিবর্তে প্রশ্ন জিজ্ঞাসা করুন।
রবিন ডউগার্টি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.