কখন এবং কীভাবে ডাবল-ড্যাশ (-) ইউনিক্স / লিনাক্সের বিকল্প সীমানার হিসাবে প্রবর্তিত হয়েছিল?


49

আমি মনে করি না শেল / এ ইউটিলিটি ঐতিহাসিক ইউনিক্স কিংবা হিসাবে "সাম্প্রতিক" হিসাবে কিছু 4.4BSD একটি হিসাবে একটি ডাবল ড্যাশ (অথবা পরপর দুই হাইফেন) ব্যবহার সমর্থিত অপশন বিভেদক শেষে । সঙ্গে FreeBSD 'র , আপনি উদাহরণস্বরূপ একটি নোট চালু দেখতে পারেন rm manpages সঙ্গে 2.2.1 রিলিজ (1997)। তবে এটি কেবল একটি আদেশের ডকুমেন্টেশন।

প্রাচীনতম এ খুঁজছি গনুহ fileutils পরিবর্তণের আমি খুঁজে পেতে পারেন, আমি এই দেখতে 1 (সামান্য রদবদল):

Tue Aug 28 18:05:24 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

* touch.c (main): Don't interpret first non-option arg as a   <---
  time if `--' is given (POSIX-required kludge).  
* touch.c: Add long-named options.
* Many files: Include <getopt.h> instead of "getopt.h" since
  getopt.h will be in the GNU /usr/include.
* install.c: Declare some functions.
* touch.c, getdate.y, posixtime.y, mktime.c: New files, from bin-src.
* posixtime.y: Move year from before time to after it (but
  before the seconds), for 1003.2 draft 10.

এটি লিনাক্সের পূর্বাভাস দেয় । এটি বিদ্যমান স্পেসের জন্য টাইমস্ট্যাম্প নির্দিষ্ট করার পরিবর্তে - আপনি নির্দিষ্ট সময়ের নির্দিষ্টকরণ (আট বা দশ-দশমিক দশমিক সংখ্যা) হিসাবে একই সংখ্যার সংখ্যার নামের সাথে একটি ফাইল তৈরি করতে চাইতে পারেন তা স্পষ্টভাবে বিবেচনার জন্য ...


  • সুতরাং এটি কি পিক্স .১ যা ইউনিক্স শেলগুলিতে বিকল্প ডিলিমিটারের শেষ-- হিসাবে ডাবল-ড্যাশ ( ) প্রবর্তন করেছিল ?
  • এটি কি এই কারণেই শুরু হয়েছিল কারণ কিছু লোক touch90 এর দশকের গোড়ার দিকে ফাইলের নামগুলিতে ডিজিট ব্যবহার করতে চেয়েছিল এবং তারপরে এটি এক দশকের জন্য এক সময় এক টুকরোকে ফ্যাশনে পরিণত হয়েছিল ??
  • চেঞ্জলগে উদ্দীপ্ত মন্তব্যটি কী?
  • নির্দেশিকা 10 কখন ছিল ( যুক্তিটি - বিকল্পগুলির সমাপ্তি নির্দেশ করে এমন একটি সীমানা হিসাবে গ্রহণ করা উচিত? [...] ) পসিক্স ইউটিলিটি সিনট্যাক্সের সাথে পরিচয় করিয়ে দেওয়া হয়েছিল ?

1. হিসাবে বিরোধিতা এই অর্থাত দলিল দীর্ঘ অপশন সব কমান্ড ব্যবহার বিশ্বব্যাপী, যা সম্পর্কহীন নয়। অন্যদিকে, আপনি বিভেদক রেফারেন্স দেখতে পারেন প্রদর্শিত ভালো কিছু গনুহ rm.c , একটি মন্তব্য হিসাবে 2000 সালে হওয়ার আগে উদ্ভাসিত 2005 সালে শেষ ব্যবহারকারীকে ( diagnose_leading_hyphen ফাংশন)। তবে এটি সব পরে এবং এটি একটি খুব নির্দিষ্ট ব্যবহারের ক্ষেত্রে।


1
BSD4.3RENO কমপক্ষে একটি getoptসমর্থিত ছিল --
স্টাফেন চেজেলাস

@ StéphaneChazelas এছাড়াও আপনি একটি তৈরি মন্তব্য সম্পর্কে getopt শুধুমাত্র API বিভেদক সাথে মোকাবিলা করতে সক্ষম হচ্ছে না। এর অর্থ কি এই যে এটি ব্যবহারের আগে সরবরাহ করা এবং কাজ করা হয়েছিল ?? আমি ভয় করি এটি আমার বাইরে beyond ধন্যবাদ!

2
এটি বেশ কয়েকটি এলোমেলো প্রোগ্রামের দ্বারা সম্ভবত অ্যাডহক ভিত্তিতে ব্যবহৃত হয়েছিল তবে আমি মনে করি getopt1980 এর দশকের গোড়ার দিকে লেখা হয়েছিল এটি প্রথম নথিভুক্ত হয়েছিল। যদি কেউ ইউনিফর্ম'৮৫ থেকে গিওপট পেপার পেতে পারে তবে এটি কিছু ইতিহাস দিতে পারে।
মার্ক প্লটনিক

2
@ মার্কপ্লটনিক, সিসিআইআই (1980) -র প্রাপ্ত গোটটি আসলে সমর্থন করে --
স্টাফেন চেজেলাস

উত্তর:


38

যতদূর আমি বলতে পারি, --শেষের-অপশন-মার্কার হিসাবে সিস্টেম তৃতীয় ইউনিক্স (1980) shএবং এর মাধ্যমে শুরু হয় getopt

বোর্ন শেল পরিবারের এই ইতিহাস অনুসারে , বোর্ন শেল প্রথম সংস্করণ 7 ইউনিক্সে প্রদর্শিত হয়েছিল (1979)। তবে যুক্তি থেকে বিকল্পগুলি আলাদাset করার কোনও উপায় ছিল না । সুতরাং মূল বোর্ন শেলটি এটি করতে পারে:

  • set -e - প্রস্থান-অন-ত্রুটি মোড চালু করুন
  • set arg1 arg2 ...- সেট করে অবস্থানগত পরামিতি $1=arg1, $2=arg2ইত্যাদি

কিন্তু: set arg1 -e arg2আপনি দিতে হবে $1=arg1, $2=arg2এবং প্রস্থান-অন-ত্রুটি চালু । উপস।

সিস্টেম III ইউনিক্স (1980) যে বাগটি সংশোধন করে তা প্রবর্তন করেছিল getoptgetoptএর ম্যান পেজ অনুসারে :

NAME
   getopt - parse command options

SYNOPSIS
   set -- `getopt optstring $∗`

DESCRIPTION
   Getopt is used to break up options in command lines for easy parsing by
   shell procedures, and to check  for  legal  options.   Optstring  is  a
   string  of  recognized  option letters (see getopt(3C)); if a letter is
   followed by a colon, the option is expected to have an  argument  which
   may or may not be separated from it by white space.  The special option
   -- is used to delimit the end of the options.  Getopt will place --  in
   the  arguments  at  the  end  of  the  options, or recognize it if used
   explicitly.  The shell arguments ($1 $2 . . .) are reset so  that  each
   option  is  preceded  by a - and in its own shell argument; each option
   argument is also in its own shell argument.

আমি যতদূর বলতে পারি, এটি প্রদর্শিত প্রথম স্থান।

সেখান থেকে, দেখে মনে হয় যে অন্যান্য কমান্ডগুলি ১৯৮০ এর দশকের বন্য ও মানহীন দিন জুড়ে দ্বিধা --পার্সিং অস্পষ্টতাকে সমাধান করার জন্য এই কনভেনশনটি গ্রহণ করেছিল (যেমন উদাহরণগুলির সাথে উদাহরণ touchএবং rmআপনি উদ্ধৃত করেছেন)।

এর মধ্যে কয়েকটি টুকরোচাল গ্রহণ পোসিক্স ১. (1988) এ কোড করা হয়েছিল, যেখানে "পসিএক্স-প্রয়োজনীয় আবদ্ধ" সম্পর্কে চেঞ্জলগের মন্তব্য এসেছে।

তবে পসিক্স ২.২০ (1992) অবধি ইউটিলিটি সিনট্যাক্স নির্দেশিকা গৃহীত হয়েছিল, যেখানে বিখ্যাত গাইডলাইন 10 রয়েছে:

Guideline 10:    The argument "--" should be accepted as a delimiter
                 indicating the end of options.  Any following
                 arguments should be treated as operands, even if they
                 begin with the '-' character.  The "--" argument
                 should not be used as an option or as an operand.

এবং এটি সেখান থেকে "ক্লডজ" হয়ে সর্বজনীন সুপারিশে চলে।


সময় দেবার জন্য আপনাকে ধন্যবাদ! আমি আমার "গবেষণায়" বেশিরভাগ ক্ষেত্রে উপেক্ষা করেছিলাম কারণ আমি বুঝতে পারি না যে এই ধরণের বিমূর্ত ব্যবহার / কার্যকারিতা কেন প্রয়োজন। এখন আমি পড়েছি যে কোনও সময় ফাঁকা ইত্যাদি নিয়ে কাজ করার জন্য সিসভের পক্ষে সম্ভব না হওয়ায় এটি পুনরায় ডিজাইন করা হয়েছিল ( গিওপটস )getopt । আমি এটি সম্পর্কে আরও পড়তে হবে! আবার ধন্যবাদ!

5
কমান্ড-লাইন বিকল্পগুলি পার্স করার জন্য যদি কোনও স্ট্যান্ডার্ড ইউটিলিটি দরকারী হবে তা আপনি যদি বুঝতে না পারেন তবে সম্ভবত আপনি কমান্ড-লাইন বিকল্পগুলির জন্য শেল পার্সার লেখার চেষ্টা করেননি? এটা এক ধরনের বেদনা! অবশ্যই যদি অন্য কোনও সরঞ্জাম আমার জন্য এটি করত তবে চমৎকার হবে ... এছাড়াও মনে রাখবেন: ১৯৮০ সালে এখানে পাইথন ছিল না, কোনও রুবি ছিল না, জাভা ছিল না, পার্ল ছিল না, পিএইচপি- এমনকি সি ++ আবিষ্কার করা হয়নি, এবং "শেল স্ক্রিপ্টিং" এর সম্পূর্ণ ধারণাটি এখনও বেশ নতুন ছিল। সুতরাং একটি স্ট্যান্ডার্ড কমান্ড-লাইন পার্সারের ধারণাটি এখনও বেশ উপন্যাস ছিল!
woods
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.