POSIX सिस्टम (उदाहरण के लिए Linux, MacOSX) पर, कम से कम संभवतः एक शेल टर्मिनल (जैसे अधिकांश) में शुरू किए गए कार्यक्रमों के लिए, मैं GNU कोडिंग सम्मेलनों (जो सामान्य तर्क नामों को भी सूचीबद्ध करता है) और PIXIX उपयोगिताओं के दिशा-निर्देशों पर गौर करने की सलाह दूंगा। , मालिकाना सॉफ्टवेयर के लिए भी:
हमेशा संभालो --version
और--help
(यहां तक कि /bin/true
उन्हें स्वीकार करता है !!)। मैं अपशब्द सॉफ्टवेयर के लेखकों समझ नहीं --help
है, मैं उन्हें नफरत है (क्योंकि prog --help
है पहले आदेश मैं एक नए कार्यक्रम पर कोशिश कर रहा हूँ)! अक्सर --help
संक्षिप्त रूप में देखा जा सकता है-h
लो --help
संदेश सूची सभी विकल्प (जब तक आप उनमें से भी कई है ... उस मामले सूची में सबसे आम लोगों और स्पष्ट रूप से कुछ का उल्लेख man
पेज या कुछ यूआरएल) और विकल्प के मूलभूत मूल्यों, और शायद महत्वपूर्ण (और इस कार्यक्रम के विशिष्ट ) पर्यावरण चर। विकल्प तर्क त्रुटि पर इन विकल्प सूचियों को दिखाएं।
स्वीकार -a
कम तर्क (एकल पत्र) और कुछ बराबर है --long-argument
, इसलिए -a2
--long-argument=2
, --long-argument 2
; बेशक आप कुछ --only-long-argument
नाम के लिए (शायद ही कभी इस्तेमाल किए गए विकल्पों के लिए) हो सकते हैं ; अतिरिक्त विकल्पों के बिना मॉडल संबंधी तर्कों के लिए -cf
आम तौर पर नियंत्रित किया जाता है -c -f
, आदि। इसलिए आपका -argument:value
प्रस्ताव अजीब है, और मैं ऐसा करने की सलाह नहीं देता।
glibc का उपयोग getopt_long या बेहतर (जैसे argp_parse , OCaml में यह Arg
मॉड्यूल , ...)
अक्सर उपयोग -
मानक इनपुट या आउटपुट के लिए (यदि आप ऐसा नहीं कर सकते, संभाल /dev/stdin
और /dev/stdout
उन्हें नहीं होने भी कुछ ऑपरेटिंग सिस्टम पर)
उनके अधिकांश विकल्प सम्मेलनों का पुन: उपयोग करके समान कार्यक्रमों के व्यवहार की नकल करें; विशेष रूप -n
से ड्राई रन (अ ला make
) -h
के लिए, मदद के लिए, -v
वर्बोसिटी, आदि के लिए ...
--
विकल्प और फ़ाइल या अन्य तर्कों के बीच विभाजक के रूप में उपयोग करें
यदि आपका प्रोग्राम स्टडिन की isatty
तुलना में परीक्षण करने के लिए उपयोग करता है, तो एक टर्मिनल है (और उस मामले में "अंतःक्रियात्मक रूप से व्यवहार करें"), गैर-संवादात्मक मोड को बाध्य करने का विकल्प प्रदान करें, इसी तरह यदि आपके प्रोग्राम में GUI इंटरफ़ेस है (और X11 डेस्कटॉप पर परीक्षण ) लेकिन यह भी कर सकता है बैच या कमांड लाइन में उपयोग किया जाता है।getenv("DISPLAY")
कुछ कार्यक्रम (जैसे gcc
) अप्रत्यक्ष तर्क सूचियों को स्वीकार करते हैं, तो @somefile.txt
इसका अर्थ है कि कार्यक्रम तर्क पढ़ें somefile.txt
; यह तब उपयोगी हो सकता है जब आपका प्रोग्राम बहुत बड़े तर्क (आपके कर्नेल से अधिक ARG_MAX
) को स्वीकार कर सकता है
BTW, आप अपने कार्यक्रम और सामान्य गोले (जैसे bash
या zsh
) के लिए कुछ ऑटो-पूर्ण सुविधाएं भी जोड़ सकते हैं
कुछ पुराने यूनिक्स कमांड (जैसे dd
, या यहां तक कि sed
) में ऐतिहासिक संगतता के लिए अजीब कमांड तर्क हैं। मैं उनकी बुरी आदतों का पालन नहीं करने की सलाह दूंगा (जब तक कि आप उनमें से कुछ बेहतर संस्करण नहीं बना रहे हैं)।
यदि आपका सॉफ़्टवेयर संबंधित कमांड-लाइन कार्यक्रमों की एक श्रृंखला है, तो गिट से प्रेरणा लें (जो आप निश्चित रूप से एक विकास उपकरण के रूप में उपयोग करते हैं), जो स्वीकार करता है git help
और जिसमें git --help
कई हैं git
subcommand
औरgit
subcommand
--help
दुर्लभ मामलों में आप भी उपयोग कर सकते हैं argv[0]
(अपने कार्यक्रम पर सिमलिंक का उपयोग करके), उदाहरण के लिए bash
लागू के रूप में rbash
एक अलग व्यवहार (है प्रतिबंधित शेल)। लेकिन मैं आमतौर पर ऐसा करने की सलाह नहीं देता; यह मतलब हो सकता है आपके प्रोग्राम का उपयोग एक स्क्रिप्ट दुभाषिए के रूप में इस्तेमाल किया जा सकता है, तो मामला यानी #!
पहली पंक्ति से व्याख्या पर execve (2) । यदि आप इस तरह की तरकीबें करते हैं, तो उन्हें --help
संदेश सहित, दस्तावेज करना सुनिश्चित करें ।
याद रखें कि POSIX पर शेल में ग्लोबिंग तर्क हैं ( आपके प्रोग्राम को चलाने से पहले !), इसलिए विकल्पों में पात्रों (जैसे *
या $
या ~
) की आवश्यकता से बचें, जिन्हें शेल-एस्केप करने की आवश्यकता होगी।
कुछ मामलों में, आप अपने सॉफ़्टवेयर में GNU गाईल या लुआ जैसे एक दुभाषिया को एम्बेड कर सकते हैं ( यदि आप प्रोग्रामिंग भाषाओं के विशेषज्ञ नहीं हैं तो अपनी स्वयं की ट्यूरिंग-पूर्ण स्क्रिप्टिंग भाषा का आविष्कार करने से बचें )। आपके सॉफ़्टवेयर के डिज़ाइन पर इसके गहरे परिणाम हैं (इसलिए जल्दी सोचा जाना चाहिए!)। फिर आपको आसानी से उस दुभाषिया के लिए कुछ स्क्रिप्ट या कुछ अभिव्यक्ति पास करने में सक्षम होना चाहिए। यदि आप उस दिलचस्प दृष्टिकोण को लेते हैं, तो अपने सॉफ़्टवेयर और उसकी व्याख्या की गई प्राइमरी को ध्यान से डिज़ाइन करें; आप कुछ अजीब उपयोगकर्ता अपनी बातों के लिए बड़ी स्क्रिप्ट कोडिंग कर सकते हैं।
अन्य मामलों में, आप अपने उन्नत उपयोगकर्ताओं को अपने सॉफ्टवेयर में अपने प्लगइन को लोड करने देना चाहते हैं ( डायनेमिक लोडिंग तकनीक ए ला dlopen
एंड dlsym
) का उपयोग करना। फिर से, यह एक बहुत ही महत्वपूर्ण डिजाइन निर्णय है (इसलिए देखभाल के साथ प्लगइन इंटरफ़ेस को परिभाषित करें और दस्तावेज़ करें), और आपको इन प्लगइन्स के लिए प्रोग्राम विकल्प पास करने के लिए एक सम्मेलन को परिभाषित करना होगा।
यदि आपका सॉफ़्टवेयर एक जटिल चीज़ है, तो इसे कुछ कॉन्फ़िगरेशन फ़ाइलों (प्रोग्राम तर्कों के अतिरिक्त या प्रतिस्थापन) में स्वीकार करें और संभवत: सभी कोड चलाने के बिना इन कॉन्फ़िगरेशन फ़ाइलों का परीक्षण (या सिर्फ पार्स) करने का कोई तरीका है। उदाहरण के लिए, एक मेल ट्रांसफर एजेंट (जैसे एक्ज़िम या पोस्टफ़िक्स) काफी जटिल है, और इसे "आधा-सूखा" चलाने में सक्षम होना उपयोगी है (उदाहरण के तौर पर यह देखते हुए कि यह वास्तव में ईमेल भेजने के बिना कुछ दिए गए ईमेल पते को कैसे संभाल रहा है)।
ध्यान दें कि /option
एक विंडोज या वीएमएस चीज है। यह POSIX सिस्टम पर पागल होगा (क्योंकि फ़ाइल पदानुक्रम /
निर्देशिका सेपरेटर के रूप में उपयोग करता है , और क्योंकि शेल ग्लॉबिंग करता है)। मेरा सारा जवाब ज्यादातर लिनक्स (और POSIX) के लिए है।
पुनश्च यदि संभव हो तो, अपने प्रोग्राम को एक मुफ्त सॉफ्टवेयर बनाएं , आपको कुछ उपयोगकर्ताओं और डेवलपर्स से सुधार मिलेगा (और एक नया प्रोग्राम विकल्प जोड़ना अक्सर एक मौजूदा मुफ्त सॉफ़्टवेयर में जोड़ना सबसे आसान चीजों में से एक है)। इसके अलावा, आपका सवाल अभीष्ट श्रोताओं पर बहुत अधिक निर्भर करता है : किशोरों के लिए एक गेम या दादी के लिए एक ब्राउज़र को कंपाइलर की तुलना में एक ही तरह के विकल्प या राशि की आवश्यकता नहीं होती है, या डेटासेंटर सिस्मैमिन के लिए एक नेटवर्क इंस्पेक्टर, या माइक्रोप्रोसेसर के लिए एक सीएडी सॉफ्टवेयर आर्किटेक्ट या पुल डिजाइनरों के लिए। प्रोग्रामिंग और स्क्रिप्टिंग से परिचित एक इंजीनियर शायद आपकी दादी की तुलना में बहुत अधिक ट्यून करने योग्य विकल्प पसंद करता है, और शायद आप X11 (शायद एक crontab
नौकरी में) के बिना अपने एप्लिकेशन को चलाने में सक्षम होना चाहते हैं ।
ls -ltr
विकल्पों को संयोजित करने के लिए लिख सकते हैं-l
,-t
और-r
। GNU शैली कार्यक्रम भी आम तौर पर एक डबल हाइफ़न जैसे शब्द आधारित विकल्पों की अनुमति देते--reverse
हैं-r
। अन्य लोकप्रिय सम्मेलनों में-h
मदद दिखाना,--
विकल्पों की समाप्ति का संकेत देना,-
स्टड से पढ़ने की अनुमति देने के लिए फ़ाइल नाम के रूप में निर्दिष्ट करना आदि शामिल हैं