दुर्भाग्य से, रूबी इस तरह के गुजर तंत्र का समर्थन नहीं करता है जैसे कि AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
इसका मतलब है कि आप अपनी स्क्रिप्ट में नामित मानों को सीधे पास नहीं कर सकते।
Cmd विकल्पों का उपयोग करने में मदद मिल सकती है:
> ruby script.rb val_0 val_1 val_2
# script.rb
puts ARGV[0] # => val_0
puts ARGV[1] # => val_1
puts ARGV[2] # => val_2
रूबी ARGV
सरणी में सभी cmd तर्कों को संग्रहीत करता है, स्क्रिप्टनाम स्वयं $PROGRAM_NAME
चर का उपयोग करके कैप्चर किया जा सकता है ।
स्पष्ट नुकसान यह है कि आप मूल्यों के क्रम पर निर्भर करते हैं।
यदि आपको केवल बुलियन स्विच की जरूरत -s
है तो रूबी दुभाषिया के विकल्प का उपयोग करें :
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
कृपया --
स्विच पर ध्यान दें , अन्यथा रूबी एक विकल्प के बारे में शिकायत करेगी -agreed
, इसलिए इसे अपने cmd इनवोकेशन के स्विच के रूप में पास करें। आपको निम्नलिखित मामले में इसकी आवश्यकता नहीं है:
> ruby -s script_with_switches.rb -agreed
> So do I!
नुकसान यह है कि आप वैश्विक चर के साथ गड़बड़ करते हैं और केवल तार्किक सच / गलत मान रखते हैं।
आप पर्यावरण चर से मूल्यों का उपयोग कर सकते हैं:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
कमियां यहां मौजूद हैं, आपको स्क्रिप्ट इनवोकेशन (केवल अपनी रूबी प्रक्रिया के लिए) से पहले या उन्हें निर्यात करने के लिए सभी चर सेट करने होंगे (बीएएस जैसे गोले):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
बाद के मामले में, आपका डेटा एक ही शेल सत्र में सभी के लिए और सभी उपप्रकारों के लिए पठनीय होगा, जो एक गंभीर सुरक्षा निहितार्थ हो सकता है।
और कम से कम आप getoptlong और Optparse का उपयोग करके एक विकल्प पार्सर को लागू कर सकते हैं ।
हैप्पी हैकिंग!