संपादित करें: कृपया, कृपया , कृपया जवाब देने से पहले इस पोस्ट के नीचे सूचीबद्ध दो आवश्यकताओं पढ़ें। लोग अपने नए रत्न और पुस्तकालय और व्हाट्सएप पोस्ट करते रहते हैं, जो स्पष्ट रूप से आवश्यकताओं को पूरा नहीं करते हैं।
कभी-कभी मैं बहुत सस्ते में कुछ कमांड लाइन विकल्पों को एक साधारण स्क्रिप्ट में हैक करना चाहता हूं। इसे करने का एक मजेदार तरीका है, बिना गेटअप या पार्सिंग या इस तरह की किसी भी चीज़ से निपटने के लिए:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
यह बिल्कुल सामान्य यूनिक्स विकल्प वाक्यविन्यास नहीं है, क्योंकि यह " myprog -i foo bar -q" के रूप में विकल्प गैर-विकल्प कमांड लाइन मापदंडों को स्वीकार करेगा , लेकिन मैं इसके साथ रह सकता हूं। (कुछ लोग, जैसे कि तोड़फोड़ करने वाले डेवलपर्स, इसे पसंद करते हैं। कभी-कभी मैं भी करता हूं।)
एक विकल्प जो अभी मौजूद है या अनुपस्थित है उसे ऊपर की तुलना में बहुत अधिक लागू नहीं किया जा सकता है। (एक असाइनमेंट, एक फंक्शन कॉल, एक साइड इफ़ेक्ट।) क्या ऐसे विकल्पों से निपटने के लिए एक समान सरल तरीका है जो एक पैरामीटर लेते हैं, जैसे कि " -f फ़ाइल नाम "?
संपादित करें:
एक बिंदु जो मैंने पहले नहीं बनाया था, क्योंकि यह मेरे लिए स्पष्ट नहीं हो गया था जब तक कि ट्रोलोप के लेखक ने उल्लेख नहीं किया था कि पुस्तकालय "एक [800-पंक्ति] फ़ाइल" में फिट है, यह है कि मैं न केवल साफ देख रहा हूं सिंटैक्स, लेकिन निम्नलिखित विशेषताओं वाली एक तकनीक के लिए:
कोड की सम्पूर्णता, ताकि एक में एक एकल फाइल ड्रॉप कर सकते हैं (वास्तविक स्क्रिप्ट ही है, जो केवल दर्जन लाइनों की एक जोड़ी हो सकता है को प्रभावित किए बिना) स्क्रिप्ट फ़ाइल में शामिल किया जा सकता है
binएक मानक रूबी 1.8 के साथ किसी भी सिस्टम पर dir । [५- and] स्थापना और इसका उपयोग करें। यदि आप एक ऐसी रूबी स्क्रिप्ट नहीं लिख सकते हैं, जिसमें बयानों की आवश्यकता न हो और जहां कुछ विकल्पों को पार्स करने के लिए कोड एक दर्जन लाइनों के तहत हो या तो, आप इस आवश्यकता को विफल करते हैं।कोड काफी छोटा और सरल है कि कोई इसे कोड में सीधे टाइप करने के लिए पर्याप्त याद रख सकता है जो कहीं और से काटने और चिपकाने के बजाय चाल को करेगा। उस स्थिति के बारे में सोचें, जहां आप बिना इंटरनेट के उपयोग के साथ गंभीर रूप से फ़ायरवॉल के कंसोल पर हैं, और आप उपयोग करने के लिए क्लाइंट के लिए एक त्वरित स्क्रिप्ट को एक साथ टॉस करना चाहते हैं। मैं आपके बारे में नहीं जानता, लेकिन (ऊपर की आवश्यकता को विफल करने के अलावा) सरलीकृत माइक्रो-ऑप्टपर्स की 45 लाइनों को भी याद रखना कुछ ऐसा नहीं है जिसकी मुझे परवाह है।
getoptlongऔर optparseमानक माणिक पुस्तकालय में हैं, इसलिए आप जब अपनी स्क्रिप्ट की तैनाती उन्हें नकल की जरूरत नहीं है - अगर माणिक उस मशीन पर काम करता है, तो require 'optparse'या require 'getoptlong'भी काम करेगा।