উত্তর:
আপনার নির্দিষ্ট স্ক্রিপ্টের জন্য কোনওভাবেই কাজ করবে, কেবলমাত্র এতে ./script.sh
কার্যকরকরণ এবং পঠনযোগ্য বিটগুলির bash script.sh
প্রয়োজন হয় , যখন কেবল পাঠযোগ্য বিট প্রয়োজন।
অনুমতিগুলির প্রয়োজনীয়তার পার্থক্যের কারণটি যে প্রোগ্রামটি আপনার স্ক্রিপ্টটিকে বোঝায় সেটিকে কীভাবে বোঝায়:
./script.sh
আপনার শেলটি ফাইলটিকে এমনভাবে চালিত করে যেন এটি একটি নিয়মিত সম্পাদনযোগ্য।শেল নিজেই কাঁটাচামচ করে এবং একটি কল কল ব্যবহার execve
করে অপারেটিং সিস্টেমকে ফাইলটি কার্যকর করতে একটি সিস্টেম কল (যেমন ) ব্যবহার করে। অপারেটিং সিস্টেমটি ফাইলের অনুমতিগুলি পরীক্ষা করে (তাই এক্সিকিউশন বিটটি সেট করা দরকার) এবং প্রোগ্রাম লোডারকে অনুরোধটি ফরোয়ার্ড করে , যা ফাইলটি দেখায় এবং এটি নির্ধারণ করে কীভাবে তা নির্ধারণ করে। লিনাক্স সংকলিত এক্সিকিউটেবলগুলি একটি ELF যাদু নম্বর দিয়ে শুরু হয়, যখন স্ক্রিপ্টগুলি একটি #!
( হ্যাশবাং ) দিয়ে শুরু হয় । একটি হ্যাশবাং শিরোনাম অর্থ ফাইলটি একটি স্ক্রিপ্ট এবং হ্যাশবাংয়ের পরে নির্দিষ্ট করা প্রোগ্রামের দ্বারা ব্যাখ্যা করা দরকার। এটি স্ক্রিপ্টকে কীভাবে স্ক্রিপ্টটির ব্যাখ্যা করতে হয় তা সিস্টেমকে বলতে দেয়।
আপনার স্ক্রিপ্টের সাহায্যে প্রোগ্রাম লোডার কমান্ড-লাইন আর্গুমেন্ট হিসাবে কার্যকর করবে /bin/bash
এবং পাস করবে ./script.sh
।
bash script.sh
আপনার শেলটি চালানো bash
এবং script.sh
কমান্ড-লাইন আর্গুমেন্ট হিসাবে পাস করেসুতরাং অপারেটিং সিস্টেমটি লোড হবে bash
(এমনকি script.sh
এটি তাকিয়েও নয়, কারণ এটি কেবল একটি কমান্ড-লাইন আর্গুমেন্ট)। তৈরি bash
প্রক্রিয়াটি তখন ব্যাখ্যা করবে script.sh
কারণ এটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে পাস করেছে। যেহেতু script.sh
কেবলমাত্র bash
নিয়মিত ফাইল হিসাবে পড়া হয় , তাই এক্সিকিউশন বিটের প্রয়োজন হয় না।
আমি ./script.sh
যদিও ব্যবহার করার পরামর্শ দিচ্ছি , কারণ স্ক্রিপ্টটির জন্য কোন দোভাষী দরকার তা আপনি হয়ত জানেন না। সুতরাং প্রোগ্রাম লোডার আপনার জন্য এটি নির্ধারণ করুন।
. ./script.sh
হিসাবে একই জিনিস না bash script.sh
(অথবা ./script.sh
। স্ক্রিপ্ট বিবেচনা করুন #!/usr/bin/python -V
<সম্পর্কে newline> print test
।
. script.sh
। তবে আমি সেই সমস্ত লোকদের সাথে একমত হই যারা .
স্ক্রিপ্টগুলিতে কমান্ড ব্যবহার করে নিরুৎসাহিত করেন যা এইভাবে চাওয়া হয়নি। আমি অবাক হয়েছি যে কেউই এটি উল্লেখ করেনি, যদি স্ক্রিপ্টে exit
কমান্ডগুলি থাকে এবং আপনি এটি উত্স করে থাকেন তবে এটি আপনাকে লগ আউট করতে পারে। স্ক্রিপ্টটি যদি একটি করে তবে একটি কম ভয়াবহ সমস্যা হবে cd
, এটি প্যারেন্ট (ইন্টারেক্টিভ) শেলকেও প্রভাবিত করবে।
bash script.sh
সরাসরি ব্যাশ ব্যবহার করে স্ক্রিপ্টটি আহ্বান করুন। কীভাবে কার্যকর করা যায় তা নির্ধারণ
./script.sh
করতে শেবাং ব্যবহার করছে #!/bin/bash
।
আপনি যদি সত্যিই জানতে চান, কোন বাইনারি কার্যকর করা হয় আপনি যদি bash script.sh
এটি করেন তবে আপনি এটি খুঁজে পেতে পারেন which bash
।
সুতরাং আপনার উদাহরণে এটি কোনও পার্থক্য করে না। হ্যাঁ, আপনাকে chmod +x script.sh
সরাসরি এটির মাধ্যমে কার্যকর করতে সক্ষম হতে হবে ./script.sh
।
/bin/bash
মধ্যে প্রথম এটি ধরে নেওয়া কোনও পার্থক্য করে bash
না $PATH
।
#!/bin/bash
/bin/bash
./script.sh
।
এই জাতীয় ফাইলগুলি মুছে দিন_সেলফ.শ. তৈরি করুন:
#!/bin/rm
echo I am still here!
sh Delete_Self.sh
আপনি দেখতে পাবেন যেহেতু "আমি এখনও এখানে আছি!" পিছনে প্রতিধ্বনিত
এটিকে এক্সিকিউটেবল করে তুলুন এবং চালনা করুন কারণ ./Delete_Self.sh
দেখবেন কোনও কিছুই আবার প্রতিধ্বনি হয় না, যখন ফাইলটি Delete_Self.sh
নিজেই চলে যায়।
সুতরাং পার্থক্যটি হ'ল:
bash script.sh
# উপেক্ষা করবে! লাইন, কারণ স্ক্রিপ্ট.শ চালানোর জন্য বাশাকে প্রোগ্রাম হিসাবে নির্দিষ্ট করা হয়েছে।./script.sh
পড়বে #! প্রোগ্রাম চালানোর জন্য লাইন script.sh
।অন্যান্য উত্তর ছাড়াও মাধ্যমে একটি স্ক্রিপ্ট চালাতে মধ্যে পার্থক্য বুদ্ধিমান ইন ./script.sh
(ঝ) এবং উৎস ./script.sh
(২) উপকারী - (ঝ) সংস্করণ, যা কমান্ড চালানোর জন্য একটি নতুন শেল তৈরি করে যেহেতু (২) এটা রান বর্তমান শেল - যা কার্যকর হতে পারে যদি এক্সিকিউটেবল পরিবর্তনযোগ্য পরিবেশের পরিবর্তনশীলগুলি কার্যকর করতে সক্ষম হয় যা এক্সিকিউটেবল প্রস্থানের পরে সংরক্ষণ করা দরকার। উদাহরণস্বরূপ, পাইথন কনডা পরিবেশ সক্রিয় করতে নিম্নলিখিত ব্যবহার করা আবশ্যক:
source activate my_env
এনবি source
আপনার মুখোমুখি হতে পারে তার আরেকটি বিকল্প হ'ল .
বিল্টিন, অর্থাৎ
. activate my_env