পসিক্স সিস্টেমে (যেমন লিনাক্স, ম্যাকোএসএক্স) কমপক্ষে শেল টার্মিনাল (সম্ভবত তাদের বেশিরভাগ) প্রোগ্রামের জন্য আমি জিএনইউ কোডিং কনভেনশনগুলি (যা সাধারণ আর্গুমেন্টের নামও তালিকাভুক্ত করে) ব্যবহার করার পরামর্শ দিচ্ছি এবং পসিক্স ইউটিলিটি গাইডলাইনগুলি সন্ধান করব এমনকি মালিকানা সফ্টওয়্যার জন্য:
সর্বদা হ্যান্ডেল --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, ইত্যাদি etc. তাই আপনার -argument:valueপ্রস্তাবটি অদ্ভুত, এবং আমি এটি করার পরামর্শ দিই না।
GLIBC getopt_long বা আরও ভাল ব্যবহার করুন (উদাঃ আরগপি_পারস , ওক্যামেলে এটির Argমডিউল , ...)
প্রায়শই -স্ট্যান্ডার্ড ইনপুট বা আউটপুট ব্যবহার করুন (আপনি যদি এটি না করতে পারেন তবে হ্যান্ডেল করুন /dev/stdinএবং /dev/stdoutএমনকী কয়েকটি অপারেটিং সিস্টেমে না থাকলেও)
অনুরূপ প্রোগ্রামগুলির বেশিরভাগ বিকল্প কনভেনশন পুনরায় ব্যবহার করে তাদের আচরণের অনুকরণ করুন; বিশেষত -nশুকনো রান (à লা make), -hসাহায্যের -vজন্য, ভার্বোসিটি ইত্যাদির জন্য ...
--বিকল্প এবং ফাইল বা অন্যান্য আর্গুমেন্টের মধ্যে বিভাজক হিসাবে ব্যবহার করুন
যদি আপনার প্রোগ্রামটি স্টিডিনেরisatty চেয়ে পরীক্ষার জন্য ব্যবহার করে তবে এটি একটি টার্মিনাল (এবং "ইন্টারেক্টিভ" আচরণ করুন সেই ক্ষেত্রে), যদি আপনার প্রোগ্রামটিতে জিইউআই ইন্টারফেস থাকে (এবং এক্স 11 ডেস্কটপে পরীক্ষা ) থাকে তবে একইভাবে যদি অ ইন্টারেক্টিভ মোডকে জোর করার জন্য একটি বিকল্প সরবরাহ করে তবে তাও পারে ব্যাচ বা কমান্ড লাইনে ব্যবহার করুন।getenv("DISPLAY")
কিছু প্রোগ্রাম (উদাহরণস্বরূপ gcc) অপ্রত্যক্ষ যুক্তির তালিকাগুলি গ্রহণ করে, এর @somefile.txtঅর্থ হল প্রোগ্রাম আর্গুমেন্টগুলি পড়ুন somefile.txt; এটি কার্যকর হতে পারে যখন আপনার প্রোগ্রামটি খুব বড় প্রচুর আর্গুমেন্ট গ্রহণ করতে পারে (আপনার কর্নেলের চেয়ে বেশি ARG_MAX)
বিটিডাব্লু, আপনি এমনকি আপনার প্রোগ্রাম এবং সাধারণ শেলগুলির জন্য কিছু স্বয়ংক্রিয়-সম্পূর্ণ সুবিধা যুক্ত করতে পারেন (যেমন bashবা zsh)
কিছু পুরানো ইউনিক্স কমান্ডের (যেমন dd, বা এমনকি sed) historicalতিহাসিক সামঞ্জস্যের জন্য অদ্ভুত কমান্ড যুক্তি রয়েছে। আমি তাদের খারাপ অভ্যাসগুলি অনুসরণ না করার সুপারিশ করব (যদি না আপনি সেগুলির থেকে আরও ভাল রূপ তৈরি করেন)।
যদি আপনার সফ্টওয়্যার সম্পর্কিত কমান্ড-লাইন প্রোগ্রামগুলির একটি সিরিজ হয়, গিট থেকে অনুপ্রেরণা নিন (যা আপনি অবশ্যই একটি বিকাশের সরঞ্জাম হিসাবে ব্যবহার করেন), যা গ্রহণ করে git helpএবং git --helpঅনেকগুলি gitsubcommandএবংgitsubcommand--help
বিরল ক্ষেত্রে আপনার কাছে ব্যবহার হতে পারে argv[0](আপনার প্রোগ্রামের উপর symlinks ব্যবহার করে), যেমন bashপ্রার্থনা হিসাবে rbashএকটি ভিন্ন আচরণ (হয়েছে সীমাবদ্ধ শেল)। তবে আমি সাধারণত এটি করার পরামর্শ দিই না; এটা জানার জন্য পারে আপনার প্রোগ্রাম ব্যবহার করে একটি স্ক্রিপ্ট দোভাষী হিসেবে ব্যবহার করা যেতে পারে যদি কুঁড়েঘর অর্থাত #!প্রথম লাইন ব্যাখ্যা উপর execve (2) । আপনি যদি এই জাতীয় কৌশলগুলি করেন তবে --helpবার্তাগুলি সহ সেগুলি নথিভুক্ত করতে ভুলবেন না ।
মনে রাখবেন যে POSIX উপর শেল হয় globbing আর্গুমেন্টগুলি ( সামনে আপনার প্রোগ্রাম চলমান!), তাই (যেমন অক্ষর প্রয়োজন এড়াতে *বা $বা ~) অপশন যা শেল-পলান হতে হবে হবে।
কিছু ক্ষেত্রে, আপনি আপনার সফ্টওয়্যারটিতে জিএনইউ গিল বা লুয়ার মতো একটি অনুবাদক এম্বেড করতে পারেন ( আপনি যদি প্রোগ্রামিং ভাষায় দক্ষ না হন তবে আপনার নিজের টিউরিং-সম্পূর্ণ স্ক্রিপ্টিং ভাষার উদ্ভাবন এড়াতে পারেন)। এটি আপনার সফ্টওয়্যারটির ডিজাইনের উপর গভীর পরিণতি ঘটায় (তাই তাড়াতাড়ি চিন্তা করা উচিত!)। তারপরে আপনার সহজেই সেই অনুবাদকের কাছে কিছু স্ক্রিপ্ট বা কিছু অভিব্যক্তি পাস করতে সক্ষম হওয়া উচিত। যদি আপনি এই আকর্ষণীয় পদ্ধতির অবলম্বন করেন তবে আপনার সফ্টওয়্যার এবং এর ব্যাখ্যাযুক্ত আদিম যত্নের সাথে ডিজাইন করুন; আপনার জিনিসটির জন্য আপনার কিছু অদ্ভুত ব্যবহারকারী কোডিং বড় স্ক্রিপ্ট থাকতে পারে।
অন্যান্য ক্ষেত্রে, আপনি আপনার উন্নত ব্যবহারকারীদের তাদের সফ্টওয়্যারটিতে তাদের প্লাগইনটি লোড করতে দিতে চান ( ডায়নামিক লোডিং কৌশলগুলি ল্যা dlopenএবং ব্যবহার করে dlsym)। আবার এটি একটি অত্যন্ত গুরুত্বপূর্ণ ডিজাইনের সিদ্ধান্ত (সুতরাং যত্ন সহকারে প্লাগইন ইন্টারফেসটি সংজ্ঞায়িত করুন এবং নথি করুন) এবং আপনাকে এই প্লাগইনগুলিতে প্রোগ্রামের বিকল্পগুলি পাস করার জন্য একটি কনভেনশন সংজ্ঞায়িত করতে হবে।
আপনার সফ্টওয়্যারটি যদি কোনও জটিল জিনিস হয় তবে এটিকে কিছু কনফিগারেশন ফাইল গ্রহণ করুন (প্রোগ্রাম যুক্তিগুলির পরিবর্তে বা প্রতিস্থাপনের জন্য) এবং সম্ভবত সমস্ত কোড না চালিয়ে এই কনফিগারেশন ফাইলগুলির পরীক্ষা করার (বা কেবল পার্স) কিছু উপায় থাকতে পারে। উদাহরণস্বরূপ, একটি মেল স্থানান্তর এজেন্ট (যেমন এক্সিম বা পোস্টফিক্স) বেশ জটিল, এবং এটি "অর্ধ-শুকনো" চালাতে সক্ষম হওয়া দরকারী (উদাহরণস্বরূপ এটি কোনও ইমেল না পাঠিয়ে কিছু প্রদত্ত ইমেল ঠিকানা কীভাবে পরিচালনা করছে তা পর্যবেক্ষণ করা)।
লক্ষ্য করুন যে এটি /optionএকটি উইন্ডোজ বা ভিএমএস জিনিস। এটি পসিক্স সিস্টেমে উন্মাদ হবে (কারণ ফাইল স্তরক্রমটি /ডিরেক্টরি সেপ্রেটর হিসাবে ব্যবহার করে এবং শেলটি বিশ্বজুড়ে করে বলে)। আমার সমস্ত উত্তর বেশিরভাগই লিনাক্স (এবং পসিক্স) এর জন্য।
PS যদি সম্ভব হয় তবে আপনার প্রোগ্রামটিকে একটি ফ্রি সফটওয়্যার করুন , আপনি কিছু ব্যবহারকারী এবং বিকাশকারীদের কাছ থেকে উন্নতি পাবেন (এবং একটি নতুন প্রোগ্রাম বিকল্প যুক্ত করা একটি বিদ্যমান ফ্রি সফ্টওয়্যারটিতে যুক্ত করার জন্য প্রায়শই সহজ জিনিসগুলির মধ্যে একটি)। এছাড়াও, আপনার প্রশ্নটি উদ্দিষ্ট দর্শকদের উপর অনেকটা নির্ভর করে : কিশোর-কিশোরীদের জন্য খেলা বা ঠাকুরমার জন্য একটি ব্রাউজার সম্ভবত সংকলকের চেয়ে একই ধরণের এবং বিকল্পগুলির প্রয়োজন হয় না, বা ডেটাসেন্টার সিসাদমিনগুলির জন্য একটি নেটওয়ার্ক পরিদর্শক, বা মাইক্রোপ্রসেসরের জন্য একটি সিএডি সফ্টওয়্যার প্রয়োজন হয় না teenage স্থপতি বা ব্রিজ ডিজাইনারদের জন্য। প্রোগ্রামিং এবং স্ক্রিপ্টিংয়ের সাথে পরিচিত কোনও প্রকৌশলী সম্ভবত আপনার ঠাকুমার চেয়ে অনেক বেশি উপযুক্ত বিকল্প পছন্দ করতে পারে এবং সম্ভবত এক্স 11 (সম্ভবত কোনও crontabচাকরিতে) ছাড়াই আপনার অ্যাপ্লিকেশনটি চালাতে সক্ষম হতে পারে want
ls -ltrবিকল্পগুলি একত্রিত করতে লিখতে পারেন-l,-tএবং-r। জিএনইউ স্টাইলের প্রোগ্রামগুলি সাধারণত শব্দ-ভিত্তিক বিকল্পগুলির--reverseপরিবর্তে ডাবল হাইফেনের সাহায্য করে-r। অন্যান্য জনপ্রিয় কনভেনশন রয়েছে যেমন-hসহায়তা দেখাতে,--বিকল্পগুলির শেষের সিগন্যাল করা,-