2012-08-28 39 views
6

मैं अपने बैश स्क्रिप्ट को लंबे पैरामीटर के साथ सौदा करना चाहता हूं। मुझे getopt मिला, लेकिन यह ओएस एक्स में समर्थित नहीं है। क्या कोई मुझे बता सकता है कि क्यों getopt बीएसडी द्वारा लागू किया गया था, लेकिन जीएनयू नहीं? मैंने जीएनयू सी लिब में getopt बनाने की कोशिश की, लेकिन यह लिनक्स के साथ मेरे खराब कौशल के लिए असफल रहा।मैक में "getopt" कमांड का उपयोग करके मैं लंबे पैरा के साथ बैश सौदा कैसे कर सकता हूं?

क्या कोई यह काम करता है?

+0

की [बैश में getopts का उपयोग करना संभव डुप्लिकेट लंबी और छोटी कमांड लाइन विकल्प प्राप्त करने के लिए खोल स्क्रिप्ट] (http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line- विकल्प) – ghoti

उत्तर

1

इसके बजाय getopts का उपयोग करना आम तौर पर बेहतर विकल्प है, और छोटे विकल्पों के साथ चिपके रहें। आप this StackOverflow Q&A में कार्रवाई में गेटोपेट देख सकते हैं। ओएसएक्स कमांड लाइन टूल्स में छोटे विकल्प अधिक मानक हैं, और स्थिरता एक अच्छी बात है।

इसके अलावा, गेट्स को बैश में बनाया गया है, इसलिए यह निश्चित रूप से ओएसएक्स में उपलब्ध है, साथ ही साथ अन्य सभी प्लेटफॉर्म जो बैश चला सकते हैं।

ध्यान दें कि getopt ओएसएक्स में भी उपलब्ध है। टर्मिनल से, इसके दस्तावेज़ देखने के लिए man getopt टाइप करें। यह लंबे विकल्पों का समर्थन नहीं करता है। जब आप OSX पर चलाने के लिए टूल लिख रहे हों तो लंबे विकल्पों का उपयोग न करने का यह एक अच्छा कारण है।

यदि आप इसे वैसे भी करना चाहते हैं, तो आप से getopt इंस्टॉल कर सकते हैं। वैकल्पिक रूप से, यदि आप बेहतर पोर्टेबिलिटी चाहते हैं, तो आप अपना खुद का लंबा तर्क संभालना रोल कर सकते हैं।

कुछ कोड पोस्ट करें, और हम इसे डीबग करने में मदद करेंगे।

10

brew bottle for getopt है।

बस brew install gnu-getopt चलाएं।

आप की तरह /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

इसके लिए पथ निर्दिष्ट कर सकते हैं या तो या brew link --force gnu-getopt तो यह /usr/local/bin/

में लिंक कर दिया जाएगा का उपयोग बस ध्यान रखें कि मजबूर कर जोड़ने के लिए अपने सिस्टम को भ्रष्ट किया जा सकता है (के रूप में यह प्रणाली की जगह हो gnu एक द्वारा getopt)।

0

मैं gnu-getopt स्थापित करने के लिए Homebrew का उपयोग कर और फिर अपने ~/.bash_profile फ़ाइल getopt के लिए cmd पथ निर्दिष्ट करने के लिए करने के लिए $FLAGS_GETOPT_CMD जोड़ने, homebrew स्थान पर ओर इशारा करते हुए की सलाह देते हैं, तो जैसे:

brew install gnu-getopt 
sudo echo 'export FLAGS_GETOPT_CMD="$(brew --prefix gnu-getopt)/bin/getopt"' >> ~/.bash_profile 
. ~/.bash_profile 
+0

मुझे प्यार है कि लोग कैसे नीचे आते हैं लेकिन शून्य टिप्पणियां प्रदान करते हैं क्यों ... tsk tsk – sMyles