এলএস কেন নকল স্যুইচ গ্রহণ করে?


16

আমি জানতে আগ্রহী নই - সেখানে মধ্যে একটি পার্থক্য আছে ls -lএবং ls -lllllllllllllllllllllllllllll?

আউটপুটটি একই বলে মনে হচ্ছে এবং কেন lsনকল স্যুইচগুলিকে অনুমতি দেয় তা নিয়ে আমি বিভ্রান্ত । এটি কি বেশিরভাগ আদেশের মধ্যে একটি আদর্শ অনুশীলন?

উত্তর:


17

সংক্ষিপ্ত উত্তর :

কারণ এটি কোনও পতাকার একাধিক ব্যবহার উপেক্ষা করার জন্য কর্মসূচিযুক্ত।

দীর্ঘ উত্তর:

আপনি দেখতে পারেন সোর্স কোড এর ls, সেখানে ফাংশন একটি অংশ getopt_long()এবং একটি বিশাল সুইচ মামলা:

1648       int c = getopt_long (argc, argv,
1649                            "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
1650                            long_options, &oi);
      ....
1654       switch (c)
1655         {
      ....
1707         case 'l':
1708           format = long_format;
1709           break;
      ....
1964     }

ফাংশনটি getopt_long()প্রোগ্রামটিতে প্রদত্ত সমস্ত পরামিতি পড়ে। ক্ষেত্রে যদি -lভেরিয়েবল formatসেট করা থাকে। সুতরাং আপনি যখন একাধিক টাইপ করেন তখন -lllllllllচলকটি একাধিকবার সেট করা হয় তবে এতে কোনও পরিবর্তন হয় না।

ঠিক আছে, এটি একটি জিনিস পরিবর্তন করে। এই বিশাল সুইচ কেস স্টেটমেন্টটি একাধিক -lফ্ল্যাগের কারণে একাধিকবার চলতে হবে । lsএকাধিক -lপতাকা দিয়ে সম্পূর্ণ করতে আরও দীর্ঘ প্রয়োজন । তবে এই সময়টি উল্লেখ করার মতো নয়। =)


11
বা অন্যভাবে বলতে গেলে এগুলিকে প্রত্যাখ্যান করা প্রোগ্রামারকে এড়িয়ে যাওয়ার চেয়ে বেশি কাজ করবে than
চিহ্নিত করুন

1
আমি যা যা বলছিলাম তা বলার জন্য +0.5, উত্সে যাওয়ার জন্য +0.5।
একটি সিভিএন

@ মার্ক - প্রোগ্রামারটির পক্ষে এটি আরও কাজ কেন?
রায়ান

@ রায়ান, একটি অতিরিক্ত "এল" বিকল্পটি প্রত্যাখ্যান করার জন্য কতজন দেখা গেছে তা ট্র্যাকিং এবং খুব বেশি সংখ্যক থাকলে একটি ত্রুটি বার্তা মুদ্রণ করা দরকার। অতিরিক্ত "l" বিকল্পগুলি উপেক্ষা করার জন্য যে কোনও সময় "এল" দেখা যাওয়ার পরে বিন্যাস শৈলীতে "দীর্ঘ_ফর্ম্যাট" সেট করা দরকার।
চিহ্নিত করুন

@ মার্ক - আমি ভাবতাম যে l এর গণনা সম্পাদন করা আরও সহজ এবং যদি এটি 1 এর বেশি হয় তবে একটি ত্রুটি মুদ্রণ করুন।
রায়ান

21

কারণ এটি করা সঠিক জিনিস। ধরুন আপনার কাছে কোনও স্ক্রিপ্ট এরকম কিছু করছে:

ls $LS_OPTIONS -l "$dir"

যেখানে এটি সম্ভব যেখানে $LS_OPTIONSইতিমধ্যে রয়েছে -l। এই আদেশটি একটি ত্রুটি তৈরি করার জন্য এটি স্ব-স্বজ্ঞাত এবং বিরক্তিকর হবে এবং এটি এড়াতে স্ক্রিপ্টে অতিরিক্ত যুক্তি প্রয়োজন।

-lএটির জন্য সর্বোত্তম উদাহরণ নাও হতে পারে তবে আশা করি আপনি দেখতে পাবেন যে ধারণাটি সাধারণভাবে কীভাবে প্রযোজ্য। একটি আরও ভাল উদাহরণ সংকলক বিকল্প যা সংকলক $CFLAGSএকটি নির্দিষ্ট অনুরোধে সুস্পষ্ট বিকল্প ডুপ্লিকেট হতে পারে।


4
একই lsবিকল্পটি ঘটতে পারে যদি আপনি একটি বিকল্প নাম নির্দিষ্ট করে থাকেন যা কিছু বিকল্পের সেট সহ কল করে।
ক্যাস্পারড

1
@ ক্যাস্পার্ড: হ্যাঁ নির্বাণ যদিও -lআপনার lsওরফে একটি খারাপ ধারণা মত মনে হয়, একই সমস্যা বিকল্প একটি ইন্টারেক্টিভ মধ্যে সুন্দর সঙ্গে উঠা সম্ভবত lsমত ওরফে -pবা --color=auto
আর .. গীটহাব বন্ধ করুন ICE

1
ওরফে ডাকতে হবে না lsllএর জন্য একটি উপাস হতে পারে ls -lএবং সেই উরফ সহ একটি সিস্টেমে আমি টাইপ করতে পারি ll -lart
কাস্পারড

11

lsকোনও bashকমান্ড নয়, তবে একটি পৃথক নির্বাহযোগ্য যা আপনি প্রবর্তন করতে যাচ্ছেন bash। এটি বলেছিল, -lকেবল বুলিয়ান পতাকা এটিই এক প্রকার, যা যদি উপস্থিত lsহয় তবে আউটপুটটির জন্য দীর্ঘ-শৈলীর বিন্যাস ব্যবহার করতে পারে। বেশিরভাগ প্রোগ্রামগুলি কেবল এ জাতীয় পতাকাগুলির একাধিক ব্যবহার ( ls -llএকইরূপে ls -l -l) উপেক্ষা করবে যদিও এর কিছু ব্যতিক্রম রয়েছে (উদাহরণস্বরূপ, যদি -v'ভার্বোস' অর্থ, তবে কোনও প্রোগ্রাম "আরও বেশি ভার্বোজ হতে" বোঝাতে একাধিক ব্যবহারের ব্যাখ্যা দিতে পারে)।


2
একটি উদাহরণ -vvvহল ssh
বার্নহার্ড

বা এমনকিaptitude moo
রুসলান

8

শেল অ্যালিয়াসগুলি বেশ বিরক্তিকর হবে যদি কমান্ডগুলি lsবারবার বিকল্পগুলির অনুমতি না দেয়।

ধরা যাক আপনার ছিল

alias ls='ls --color=auto'
alias rm='rm -i'

তারপর, পরস্পরবিরোধী পতাকা অনুমতি দেওয়া হয়নি, এটা মত ইস্যু কমান্ড একটি ত্রুটি হবে ls --color=neverবা ls --color=autoবা rm -i

অতএব, এই কমান্ডগুলি পরের পতাকাগুলিকে পূর্বেরগুলিকে ওভাররাইড করার জন্য ডিজাইন করা হয়েছে।


বিরোধী সুইচগুলি কখনও কখনও অনুমোদিত নয়। ( উদাহরণস্বরূপ, --inplaceএবং উভয়কে --delay-updatesনিয়েই সিএসএনসি চেষ্টা করুন )) কিছু সরঞ্জাম কেবল শেষ যা আসে তা গ্রহণ করে; rm -ifসম্ভবত সেখানে একটি ভাল উদাহরণ। কিন্তু ম এর -l অপশনের কোনো দ্বন্দ্ব নেই, অত ls -lএবং ls -llএকটা সমস্যা হয় না, এবং এটি কোনো গুরুত্বপূর্ণ পদ্ধতিতে মৃত্যুদন্ড প্রভাব ফেলে না। কম্পিউটারগুলি মন-সংকুচিত পুনরাবৃত্তিতে ভাল।
একটি সিভিএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.