"বাশ" বিকল্পে সর্বশেষ "-" (হাইফেন) এর অর্থ কী?


15

ইন এই টিউটোরিয়াল আমরা নিম্নলিখিত কমান্ড প্রয়োগ করা প্রয়োজন:

# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

শেষ -(হাইফেন) এর bashঅর্থ কী?

আমি এটির সাথে অনেকগুলি আদেশ দেখতে পেয়েছি এবং নিজেকে একটি যৌক্তিক ব্যাখ্যা খুঁজে পাই না এবং এটির জন্য গুগল অনুসন্ধানকে কীভাবে সংস্কার করতে হয় তাও খুঁজে পাইনি। এটি কি পাইপড কমান্ডের আউটপুট?



2
নেটওয়ার্ক থেকে স্টাফ ডাউনলোড করা এবং এটিকে সরাসরি পাইপ করা sudo bashসত্যিই ভীতিজনক শোনায়। এমন টিউটোরিয়াল সন্ধানের চেষ্টা করুন যা এ জাতীয় অনুশীলনগুলিকে উত্সাহ দেয় না।
এইচএমখোলম

এটি এনপিএম টিউটোরিয়াল, তবে আমি আপনার সাথে একমত ...
ওমর বিস্তামি

1
আপনার যদি চিহ্নগুলির মধ্যে জিনিসগুলির সন্ধান করতে হয় তবে চেষ্টা করুন symbolhound.com
জো

উত্তর:


31

কথাটি আসার সাথে সাথে কিছুটা মান -হীন আচরণ করে বাশ -

পসিক্স বলেছেন:

গাইডলাইন 10:
প্রথম --যুক্তি যা কোনও বিকল্প-যুক্তি নয় তা বিকল্পগুলির সমাপ্তি নির্দেশ করে একটি সীমানা হিসাবে গ্রহণ করা উচিত। নিম্নলিখিত কোনও যুক্তিগুলি -চরিত্র দিয়ে শুরু হলেও, অপারেশন হিসাবে বিবেচনা করা উচিত ।

[...]

গাইডলাইন 13:
যেসব ইউটিলিটিগুলি অপারেশনগুলি ফাইল পড়তে বা লেখার জন্য খোলার জন্য প্রতিনিধিত্ব করে তাদের জন্য -কেবলমাত্র স্ট্যান্ডার্ড ইনপুট (বা স্ট্যান্ডার্ড আউটপুট যখন প্রসঙ্গ থেকে পরিষ্কার হয় যে কোনও আউটপুট ফাইল নির্দিষ্ট করা হচ্ছে) বা একটি ফাইল নামকরণ -

এবং

POSIX.1-2017 এর শেল এবং ইউটিলিটিস ভলিউমে বর্ণিত কোনও ইউটিলিটি যেখানে -স্ট্যান্ডার্ড ইনপুট বা আউটপুট বোঝাতে অপারেন্ডকে স্বীকার করতে বা গ্রহণ করতে হবে না , এই ব্যবহারটি অপের্যান্ডস বিভাগে ব্যাখ্যা করা হয়েছে। অন্যথায়, যদি এই ধরনের একটি ইউটিলিটি ব্যবহার operands ফাইল প্রতিনিধিত্ব করতে, এটি বাস্তবায়ন-সংজ্ঞায়িত প্রতীক কিনা তা ব্যবহারকারীকে -স্ট্যান্ডার্ড ইনপুট (অথবা মান আউটপুট) ঘোরা, অথবা নামের একটি ফাইল জন্য -

তবে তারপরে man 1 bashপড়ে:

একটি --বিকল্পগুলির সমাপ্তির ইঙ্গিত দেয় এবং পরবর্তী বিকল্প প্রক্রিয়াটিকে অক্ষম করে। এর পরে যে কোনও যুক্তি --ফাইল নাম এবং যুক্তি হিসাবে বিবেচিত হবে। এর একটি যুক্তি -সমতুল্য --

সুতরাং বাশের জন্য -মানে স্ট্যান্ডার্ড ইনপুট বা কোনও ফাইল নয়, তাই কিছুটা অ-মানক।

এখন আপনার বিশেষ কেস:

curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

আমি সন্দেহ করি যে এই আদেশের লেখক বুঝতে পারবেন না যে এই ক্ষেত্রে -সমতুল্য --। আমি সন্দেহ করি যে লেখক bashএটির মানক ইনপুট থেকে পড়বেন কিনা তা নিশ্চিত করতে চেয়েছিলেন , তারা -গাইডলাইন 13 অনুসারে কাজ করবে বলে আশা করেছিল।

তবে এটি গাইডলাইন অনুসারে কাজ করলেও -এখানে অপ্রয়োজনীয় হবে কারণ bashএর স্ট্যান্ডার্ড ইনপুটটি পাইপ হওয়ার সময় সনাক্ত করে এবং সে অনুযায়ী কাজ করে (যদি না -cদেওয়া হয় তবে )।

তবুও -গাইডলাইন অনুযায়ী কাজ করে না, এটি কাজ করে --। এখনও --এখানে অপ্রয়োজনীয় কারণ এর পরে কোনও যুক্তি নেই।

আমার মতে সর্বশেষ -পরিবর্তন কিছুই। কমান্ড এটি ছাড়া কাজ করবে।

কীভাবে --এবং -সাধারণভাবে কার্যকর হতে পারে তা দেখতে নীচের উদাহরণটি অধ্যয়ন করুন।


catআমার কুবুন্টু উভয় নির্দেশাবলী আনুগত্য এবং আমি উপযোগিতা প্রদর্শন করার জন্য এটি ব্যবহার করতে হবে -এবং --

নামের একটি ফাইল fooউপস্থিত থাকুক । এটি ফাইলটি মুদ্রণ করবে:

cat foo

নামের একটি ফাইল --helpউপস্থিত থাকুক । এটি ফাইলটি মুদ্রণ করবে না:

cat --help

তবে এটি নামক ফাইলটি মুদ্রণ করবে --help:

cat -- --help

এটি --helpস্ট্যান্ডার্ড ইনপুট থেকে যা আসে তার সাথে ফাইলটির নাম যুক্ত করে:

cat -- --help -

মনে হচ্ছে আপনার সত্যই দরকার নেই --, কারণ আপনি সর্বদা পাস করতে পারেন ./--helpযা নিশ্চিতভাবে একটি ফাইল হিসাবে ব্যাখ্যা করা হবে। তবে বিবেচনা করুন

cat "$file"

ভেরিয়েবলের বিষয়বস্তু কী তা আপনি আগেই জানেন না। আপনি কেবল ./এটির জন্য পূর্বপরিবর্তন করতে পারবেন না , কারণ এটি একটি পরম পথ হতে পারে এবং ./এটিকে ভেঙে দেয়। অন্যদিকে এটি একটি ফাইল হতে পারে --help(কারণ কেন নয়)। এই ক্ষেত্রে --খুব দরকারী; এটি আরও অনেক দৃust় আদেশ:

cat -- "$file"

6

ইন man bash, একক-অক্ষরের বিকল্পগুলির শেষে রয়েছে: -

--    A -- signals the end of options and disables further option processing.
      Any arguments after the -- are treated as filenames and arguments. An
      argument of - is equivalent to --.

আপনি যদি সম্পূর্ণ কমান্ডটি উদ্ধৃত করেছেন, আমি এই উদাহরণের -পরে ব্যবহার করার কোনও কারণ দেখতে পাচ্ছি না bashতবে এতে কোনও ক্ষতি হয় না।


আপনার উত্তরের জন্য ধন্যবাদ, হ্যাঁ আমি সম্পূর্ণ আদেশটি উদ্ধৃত করেছি। সুতরাং - বা - এর পরে যে কোনও কিছুই বিকল্প হিসাবে দেখা যাবে না তবে ফাইলের নাম বা যুক্তি হিসাবে দেখা যাবে, আপনি কি দয়া করে এটির উদাহরণ দিতে পারেন যেখানে এটি কার্যকর?
ওমর বিস্তামি

1
যার নাম শুরু হয় এমন কোনও স্ক্রিপ্টের পক্ষে এটি অনুমতি দেওয়া -, একটি অসম্ভাব্য প্রয়োজনীয়তা, তবে -/ --এটি সম্ভব করে তোলে।
এএফএইচ

1
@ ওমবিবিস্টামি একটি কমান্ডের উদ্ধৃতি শেলটি কীভাবে প্রসারিত করবে তা প্রভাবিত করবে, তবে এটি অনুসরণকারী কোনও আর্গুমেন্টকে প্রভাবিত করবে না। আপনি যদি বৈধ যুক্তিগুলির আশেপাশে উদ্ধৃতিগুলি প্রসারিত করেন তবে সেগুলি কমান্ড নামের অংশ হয়ে যায় যা আপনি যা চান তা নয়। কিছু কমান্ড রয়েছে যা ফাইলের নামগুলি আর্গুমেন্ট হিসাবে গ্রহণ করে তবে ডিফল্টরূপে স্ট্যান্ডার্ড ইনপুট ব্যবহার করবেন না। একটি স্বীকৃত উদাহরণ আপনাকে দুটি ফাইলের মধ্যে স্যান্ডউইচ ইনপুট (টার্মিনাল বা পাইপ থেকে) অনুমতি দেয়। cat file1 - file2 > file3
জো

1
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

bash -তার মানে bashস্টিডিনের জন্য অপেক্ষা করা সুতরাং ব্যবহারিকভাবে বাশ বামদিকে যে কমান্ড দিয়ে ফিরে এসেছে তা কার্যকর করবে|

অনুরূপ তবে সহজ উদাহরণটি হ'ল:

echo hello | cat - এখানে, cat'হ্যালো' প্রিন্ট করা হবে। কেন? কারণ 'হ্যালো' এর মাধ্যমে বিড়ালের কাছে প্রেরণ করা হচ্ছে |এবং এতে catকোনও প্রেরণের জন্য অপেক্ষা করা হচ্ছে

এখন পুরো কমান্ড দুটি ভাগে ভাঙ্গি:

curl -sL https://rpm.nodesource.com/setup_6.x

এই কার্ল কমান্ডটি এমন কিছু প্রত্যাবর্তন করবে যা ব্যাশ দ্বারা বোঝা এবং সম্পাদনযোগ্য

তারপরে আমাদের কাছে একটি পাইপ রয়েছে |যা কার্ল কমান্ড দ্বারা ফেরত আউটপুটটি পাইপের ডানদিকে প্রেরণ করবে sudo -E bash -। শেষ sudo -E bash -অবধি, ব্যাশ এতে প্রেরিত যে কোনও কিছু কার্যকর করতে প্রস্তুত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.