ইউনিক্সের স্ট্যান্ডেলোন কমান্ড হিসাবে নক্ষত্রটির কাজ কী?


21

আমি রেড হ্যাট লিনাক্সের টার্মিনালে ঘোরাঘুরি করছিলাম, এবং আমি যখন অক্ষরটি টাইপ করছিলাম ( *তারপরে) ফিরে আসি এবং এটি আমার ডিরেক্টরিতে একটি প্রোগ্রাম কার্যকর করে। কেন?

আমার সর্বোত্তম অনুমান যে ইউনিক্স এটিকে একটি ওয়াইল্ডকার্ড হিসাবে ধরেছিল তাই এটি প্রথম বর্ণমালা প্রোগ্রাম কার্যকর করে। যেহেতু my_program.exeএবং one_of_my_programs.programকেবল ফাইলটির নাম টাইপ করে সম্পাদন করা যায়, ওয়াইল্ডকার্ড অপারেটর সমস্ত সম্ভাব্য ফাইলের প্রতিনিধিত্ব করে। যেহেতু কোনও প্রোগ্রাম প্রথম বর্ণানুক্রমিকভাবে হয় তাই ইউনিক্স এটি কার্যকর করে। এটা কি সঠিক রায়?


আমি মনে করি যে সমস্ত শাঁস *বর্ণানুক্রমিকভাবে প্রসারকে সাজিয়ে তোলে না, তবে বাশ হ'ল এটি।
aschepler

1
@ এসচেপলার: সমস্ত পসিক্স-কনফর্মিং শেল অবশ্যই; দেখতে pubs.opengroup.org/onlinepubs/9699919799/utilities/... পাড়া 3.
dave_thompson_085

উত্তর:


20

আপনার ব্যাখ্যাটি সঠিক। বাকি ফাইলগুলি এর প্যারামিটার তালিকা হিসাবে উপস্থাপন করা হবে।

নোট করুন যে প্রোগ্রামটি এক্সিকিউটেবল বিট সেট থাকলে এবং বর্তমান ডিরেক্টরি PATHতালিকায় থাকে তবে এটি এটি করবে ।

কয়েকটি নোট যা বুঝতে সহায়তা করতে পারে: -

  • আপনি যদি টাইপ করেন ./*তবে PATHপ্রবেশের প্রয়োজন হয় না।
  • আপনি যদি টাইপ করেন . *বা . ./*এবং প্রথম মিলনকারী ফাইলটি একটি স্ক্রিপ্ট হয়, তবে এটি কার্যকর করার প্রয়োজন হবে না, বা বর্তমান ডিরেক্টরিটি থাকা দরকার PATH(এটি ছাড়া অন্য শাঁসের ক্ষেত্রেও সত্য হতে পারে না bash)।

10
"এটি কেবল এটি করবে ..." - এটি আরও আকর্ষণীয় হতে পারে। শেল ফাংশন, বিল্টিন বা PATHপ্রথম ফাইলের মতো একই নামের সাথে একটি এক্সিকিউটেবল যদি থাকে তবে এই অন্যান্য কমান্ড কার্যকর করা হবে। mkdir foo; cd foo; touch rm xyz; ls; *; ls
কামিল ম্যাকিয়েরোভস্কি

@KamilMaciorowski - ফেয়ার পয়েন্ট: নিদিষ্ট "এটা এই শুধুমাত্র ... কি করতে হবে" আমার বিবৃতি প্রয়োজনীয় শর্ত, কিন্তু না যথেষ্ট বেশী। কমান্ডটিও যদি *অন্য কোনও নাম হয় তবে আলাদাভাবে আচরণ করবে ।
এএফএইচ

1
উপসংহার: এটি করবেন না! এমনকি আপনি যদি মনে করেন যে আপনি গ্লোব সম্প্রসারণ বর্ণানুক্রমিক ক্রমের উপর নির্ভর করতে পারেন তবে নোট করুন যে এই আদেশটি লোকেলের উপর নির্ভর করে।
হারুন

. *বা . ./*একটি করতে পারেন bash *(বা অন্য কোনও শেল) ছাড়াও
অলিভিয়ার ডুলাক

11

এটি প্রস্তাবিত করে যে .এটি আপনার PATHচলকের অংশ । এটি সুরক্ষার কারণে সত্যই খারাপ ধারণা (স্বাভাবিকভাবেই, উইন্ডোজটিকে এটিকে একটি পরিবর্তনযোগ্য ডিফল্ট হিসাবে তৈরি করতে হয়েছিল)।

তবে, এই "পরামর্শ "টি কেবলমাত্র হালকাভাবে বৈধ: আপনার যদি rmআপনার বর্তমান ডিরেক্টরিতে কোনও ফাইলের নাম থাকে , *তবে এটি ডিফল্ট কার্যকর করতে হবে rm:

/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$ 
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm  what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$ 

আপনি দেখতে পাচ্ছেন যে এটি rmবর্তমান ডিরেক্টরিতে ছিল না (একটি খালি এবং কার্যকরযোগ্য ফাইল নয়) যা কার্যকর হয়েছিল বরং সিস্টেমটির ডিফল্ট ছিল /bin/rm

ওয়াইল্ডকার্ড জড়িত থাকাকালীন সর্বদা আপনার আদেশগুলি ডাবল পরীক্ষা করুন। এখানে পড়ার জন্য সবচেয়ে ভয়ঙ্কর বার্তাগুলির মধ্যে একটি:

rm: cannot remove '.o': No such file or directory

এটি কল করার ফলাফল

rm * .o

, কম-বেশি কোনও স্পিউরিয়াস স্পেসের সবচেয়ে খারাপ স্থানটি যার সাথে আসতে পারে।


1
এটি কোনও ফাংশন তৈরি করতে আঘাত দেয় না rm()যা হয় -iপ্যারামিটারগুলিতে যুক্ত হয় বা প্যারামিটারগুলি পরীক্ষা করে এবং নির্দিষ্ট সংখ্যার বেশি থাকলে নিশ্চিতকরণের জন্য জিজ্ঞাসা করে।
এএফএইচ

3
"এখানে পড়ার জন্য সবচেয়ে ভয়ঙ্কর বার্তাগুলির মধ্যে একটি এখানে" Here
মেহরদাদ

সুরক্ষার কারণে এটি আসলেই খারাপ ধারণা (স্বাভাবিকভাবেই, উইন্ডোজটিকে এটিকে একটি পরিবর্তনযোগ্য ডিফল্ট হিসাবে তৈরি করতে হয়েছিল) for
ডানকান এক্স সিম্পসন

এফটিএফওয়াই: mv /tmp/ohno /tmp/ohnoes( google.fr/search?q=ohnoes&source=lnms&tbm=isch )
অলিভিয়ার ডুলাক

উইন্ডোজ এটিকে একটি অবিরাম পরিবর্তনযোগ্য ডিফল্ট হিসাবে তৈরি করার একটি ভাল কারণ রয়েছে। এটি ডস বাস্তবায়িত ডিরেক্টরিগুলির আগের দিন থেকেই পিছনের সামঞ্জস্যের একটি শৃঙ্খলা বজায় রাখতে হবে। মনে রাখবেন যে দিনগুলিতে পিসি ব্যবহার করে কারও কাছেই হার্ড ডিস্ক ছিল না এবং ফ্লপি ডিস্কগুলি এত ছোট ছিল যে ডিরেক্টরিগুলি প্রাথমিকভাবে প্রয়োজনীয় বিবেচিত হত না।
মুজার 14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.