শেল ওয়ার্কে কলিং কমান্ডগুলি কীভাবে কাজ করে
না, এটি কোনও আদেশ নয়। শেলগুলি যেভাবে কাজ করে তা হ'ল আপনি যখন পাঠ্যের একটি লাইনে টাইপ করেন, প্রথম শব্দটি কমান্ড হিসাবে বিবেচিত হবে, এবং কমান্ডটি শেলটি অন্তর্নির্মিত শেলগুলির মধ্যে একটি না হলে শেলটি PATH
পরিবেশের ভেরিয়েবলের তালিকাভুক্ত সমস্ত অবস্থানের দিকে তাকাবে ।
আপনি যে কমান্ডটি চালাতে চান সেই নির্দেশিকাটি বর্তমানে অবস্থিত একই ডিরেক্টরিতে থাকলেও সেই ডিরেক্টরিটি ডিরেক্টরিগুলির তালিকাতে না থাকলে কী হবে PATH
? আপনার যখন ব্যবহার করা দরকার তখনই ./
। এটি একরকম করার মতোই /bin/bash
- আপনি শেলটি বলছেন যেখানে আপনার কাঙ্ক্ষিত কমান্ডটি রয়েছে, এটির পুরো পথ। এবং। / এর ক্ষেত্রে আপনি "এই ডিরেক্টরিটি দেখুন" শেল করতে বলছেন। তাই গুরুত্বপূর্ণ অংশটি হ'ল ফাইলটি যেখানে অবস্থিত সেখানে আপনাকে একই ডিরেক্টরিতে থাকতে হবে।
অবশ্যই, কার্যকরভাবে এক্সিকিউটেবল চালানোর জন্য এটির এক্সিকিউটেবল বিট সেট থাকা আবশ্যক, সুতরাং আপনার প্রয়োজন chmod +x ./my_file
।
সুতরাং গুরুত্বপূর্ণ পদক্ষেপগুলি:
cd
যেখানে আপনি ফাইলটি সংরক্ষণ করেছেন; যদি এটি ভিতরে হয় ~/Downloads
, তাহলেcd ~/Downloads
- চালান
chmod +x ./truecrypt-7.2-setup-x86
, এটি বলছে " এই ডিরেক্টরিতে কার্যকর ফাইল ট্রুক্রিপট -7.2-সেটআপ-x86 করুন "
- এবং এখন কি
sudo ./truecrypt-7.2-setup-x86
নোট করুন যে ব্যবহারটি ./
এলোমেলো আচরণ নয়, তবে পোর্টেবল অপারেটিং সিস্টেম ইন্টারফেস স্ট্যান্ডার্ড (ওরফে পসিক্স) দ্বারা নির্দিষ্ট করা একটি স্ট্যান্ডার্ড , বিশেষত "কমান্ড অনুসন্ধান এবং সম্পাদন" বিভাগটি দেখুন।
ত্রুটি পুনরুত্পাদন
$ # my script is in ~/Downloads folder
$ stat -c "%n" /home/xieerqi/Downloads/my_script.sh
/home/xieerqi/Downloads/my_script.sh
$ # if I run sudo ./my_script.sh, we get an error
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
$ # of course the command not found because file is not in ./, not in this dir
$ # this is not sudo's problem
$ # but sudo does indeed show the same error even if you're in same directory
$ cd ./Downloads/
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
দ্রষ্টব্য : প্রদত্ত ত্রুটি বার্তা sudo
স্পষ্টতই বিভ্রান্তিমূলক তাই এই বিষয়টি মনে রাখা উচিত; তবে দয়া করে নোট করুন যে ওপি যে প্রশ্নটি জিজ্ঞাসা করছে তার মূল এটি ছিল না ।
ডকুমেন্টেশন এবং রেফারেন্স
bash
৪.৩ ম্যানুয়াল থেকে , "কম্যান্ড এক্সিকিউশন" বিভাগ:
যদি নামটি শেল ফাংশন বা বিল্টিন না হয় এবং এতে কোনও স্ল্যাশ না থাকে তবে ব্যাশ সেই নাম অনুসারে এক্সিকিউটেবল ফাইল ধারণকারী ডিরেক্টরিটির জন্য PATH এর প্রতিটি উপাদান অনুসন্ধান করে।
থেকে ব্যাশ মধ্যে এটি চালানোর জন্য কেন আপনি প্রয়োজন স্ক্রিপ্ট নাম আগে (ডট স্ল্যাশ) না ./? :
এটি। / এর সাথে কাজ করে কারণ পসিক্স উল্লেখ করে যে / / ধারণকৃত একটি কমান্ড নাম সরাসরি ফাইলের নাম হিসাবে ব্যবহার করা হবে, $ PATH- তে অনুসন্ধানকে দমন করে। আপনি ঠিক একই প্রভাবের জন্য পুরো পথটি ব্যবহার করতে পারতেন, তবে ./ সংক্ষিপ্ত এবং লিখতে সহজ।
./
কমান্ডের অংশ "বর্তমান ডিরেক্টরির মধ্যে তাকান, এবং এখান থেকে কমান্ড 'truecrypt-7.2 সেটআপ-এক্স 86' চালানো" বলার নেই। যে ডিরেক্টরিটি আপনি ফাইলটি প্যাক করেছেন সেখানে আপনাকে এই কমান্ডটি চালাতে হবে।