স্যাশিং এবং ব্যাশে ফর্কিংয়ের মধ্যে পার্থক্য শিখুন


এই নিবন্ধটির মূল লক্ষ্য হ'ল আপনি যখন স্ক্রিপ্ট বনাম সোর্স স্ক্রিপ্টটি চালাবেন তখন কী হয় clearly প্রথমে আমরা স্পষ্টভাবে বুঝতে পারি যে আপনি যখন স্ক্রিপ্টটি বিভিন্ন উপায়ে কল করবেন তখন প্রোগ্রামটি কীভাবে জমা দেওয়া হয়।

দ্রষ্টব্য: একটি এক্সটেনশান সহ স্ক্রিপ্ট তৈরি করা কোনও বিষয় নয়। স্ক্রিপ্ট এমনকি এক্সটেনশন ছাড়াই ঠিক চলবে।

মূলত, প্রতিটি স্ক্রিপ্ট একটি শেবাং (#!) নামক একটি লাইন দিয়ে শুরু হয়। ব্যাশের হ্যাশ প্রতীকটি মন্তব্য হিসাবে ব্যাখ্যা করা হবে তবে শেবাংয়ের একটি বিশেষ অর্থ রয়েছে। এটি বাশকে আপনি শেবাং-এ যে কোনও দোভাষী বলেছেন উল্লেখ করে প্রোগ্রামটি জমা দিতে বলে।

নীচে একটি নমুনা প্রোগ্রাম রয়েছে এবং আমি ব্যাশকে আমার দোভাষী হিসাবে উল্লেখ করছি।

$ cat >> Hello_World.sh
#!/usr/bin/env bash
echo "Hello world"

$ chmod +x Hello_world.sh

এখন স্ক্রিপ্টটি চালাতে, আপনি এটি দুটি উপায়ে করতে পারেন।

  • স্ক্রিপ্ট কল করতে একটি আপেক্ষিক পথ ব্যবহার করুন। স্ক্রিপ্টটি উপস্থিত রয়েছে এমন ডিরেক্টরিতে যান এবং চালান/ স্ক্রিপ্টটি কল করতে পরম পাথটি ব্যবহার করুন। ফাইল সিস্টেমের যে কোনও জায়গা থেকে স্ক্রিপ্টের পুরো পথটি টাইপ করুন

$ ./Hello_world.sh
$ pwd
$ /home/karthick/Hello_world

আপনি যখন শেবাং ছাড়াই আপনার প্রোগ্রামটি জমা দেওয়ার চেষ্টা করেন তখন কী হয় তা দেখা যাক। শেবাংয়ের অভাবে আপনি যে বর্তমান শেলটি নিয়ে চলছেন তা প্রোগ্রামটি জমা দেওয়া হবে, আমার ক্ষেত্রে এটি বাশ (/ বিন/বাশ)।

আমাকে একটি উদাহরণ প্রদর্শন করুন। আমি শেবাং ছাড়াই একটি অজগর স্ক্রিপ্ট তৈরি করছি এবং আমি যখন প্রোগ্রামটি কল করি তখন বাশ জানে না যে এটি এই প্রোগ্রামটি অজগর দোভাষীকে জমা দিতে হবে পরিবর্তে এটি বর্তমান শেলটিতে প্রোগ্রামটি চালাবে।

$ cat > run-py.py
echo $SHELL
print("Hello world")

$ chmod +x run-py.py
$ ./run-py.py

এই ক্ষেত্রে, আপনি কোন দোভাষী তার কাছে জমা দিতে হবে বা কেবল শেবাং লাইন যুক্ত করতে হবে যা সর্বদা সুপারিশ করা হয় তা উল্লেখ করে আপনি প্রোগ্রামটি কল করতে পারেন।

# which python3
$(which python3) /home/karthick/run_py.py

এখন আপনি কীভাবে স্ক্রিপ্টটি কল করতে জানেন তা পরের ধাপে আমরা যখন স্ক্রিপ্টটি কল করি তখন কী হয় তা বুঝতে হবে। যখন আপনি উপরোক্ত উদাহরণগুলিতে বর্ণিত স্ক্রিপ্টটি চালু করবেন তখন এটি একটি শিশু প্রক্রিয়া তৈরি করবে (কাঁটাচামচ) এবং স্ক্রিপ্টটি শিশু প্রক্রিয়াতে জমা দেওয়া হবে। আমি একটি নমুনা স্ক্রিপ্ট চালিয়েছি যা কেবলমাত্র নিম্নলিখিত কমান্ডটি চালাবে এবং স্ক্রিপ্টটি কোনও শিশু প্রক্রিয়াতে জমা দেওয়া দেখায়।

$ ps -ef --forest | grep -i bash

স্ক্রিপ্টের অংশ হিসাবে একাধিক শিশু প্রক্রিয়া থাকতে পারে এবং এটি আমাদের কোডের উপর নির্ভর করে। এটি লক্ষণীয় যে সাবস্ক্রিপ্ট দ্বারা নির্মিত পরিবেশগত ভেরিয়েবলগুলি এটি শেষ হয়ে গেলে বাদ দেওয়া হবে। একটি শিশু প্রক্রিয়া তাদের রফতানি করে পিতামাতার প্রক্রিয়া দ্বারা নির্মিত ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে। তবে পিতামাতার প্রক্রিয়া শিশু প্রক্রিয়া দ্বারা নির্মিত ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে না।

ভেরিয়েবলগুলি কীভাবে কাজ করে এবং কীভাবে ভেরিয়েবলগুলি এক্সপোর্ট করতে হয় সে সম্পর্কে আরও জানতে নীচের নিবন্ধগুলিতে একবার দেখুন।

  • শেল স্ক্রিপ্টিংয়ে ‘লিনাক্স ভেরিয়েবলস’ বোঝা এবং লেখা
  • বাশ এবং AS BASHPID এর মধ্যে পার্থক্য শিখুন

স্ক্রিপ্ট সোর্সিং

"উত্স" হ'ল একটি শেল অন্তর্নির্মিত কমান্ড যা ফাইলটি এটির জন্য একটি আর্গুমেন্ট হিসাবে পাস করে এবং বর্তমান শেল পরিবেশে কোড চালায় reads আপনি বেশিরভাগ ব্যবহার করেন এমন উপযুক্ত ব্যবহারের ক্ষেত্রে আপনার কনফিগারেশনটি .Bashrc অথবা .Bash_profile এ পরিবর্তন করে সোর্স কমান্ড ব্যবহার করে পরিবর্তনগুলি পুনরায় লোড করা হয়।

$ type -a source

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

$ source FILE_NAME [ARGUMENTS]
$ . FILE_NAME [ARGUMENTS]

উত্সটি আসলে কীভাবে কাজ করে তা আমি প্রদর্শন করব। আমি দুটি শেল স্ক্রিপ্ট তৈরি করতে যাচ্ছি। প্রথম স্ক্রিপ্ট (মডিউল.শ) কিছু ভেরিয়েবল এবং ফাংশন ধরে চলেছে। দ্বিতীয় স্ক্রিপ্ট (মেইন.শ) চলকটি মুদ্রণ করতে এবং ফাংশনটি কল করতে চলেছে।

ফাইল মডিউল.শ।

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo “Function f1 is called”
}

ফাইল মেইন.এস.

#!/usr/bin/env bash

echo $VAR1
f1

স্ক্রিপ্টের জন্য নির্বাহের অনুমতি সেট করুন এবং প্রধান স্ক্রিপ্টটিকে "main.sh" কল করুন। এখন, এই স্ক্রিপ্টটি বর্তমান শেল পরিবেশে f1 এবং পরিবর্তনশীল VAR1 ফাংশনটি সন্ধান করার চেষ্টা করবে এবং খুঁজে পাওয়া যায় না এমন কমান্ডটি ব্যর্থ হবে।

$ bash main.sh

এখন আসুন স্ক্রিপ্টের অভ্যন্তরে সোর্স কমান্ডটি চালান যা বর্তমান শেল পরিবেশে ভেরিয়েবল এবং ফাংশনগুলি লোড করবে এবং এটি "main.sh" দ্বারা অ্যাক্সেসযোগ্য হবে।

ফাইল মডিউল.শ।

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo "Function f1 is called"
}

ফাইল মেইন.এস.

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1

এখন আবার স্ক্রিপ্ট চালান এবং দেখুন।

$ bash main.sh

আমাদের শেল স্ক্রিপ্টগুলি তৈরিতে মডুলার প্রোগ্রামিং পদ্ধতির অনুসরণ করতে উত্সটি ব্যাশ-এ খুব কার্যকর। আমরা আমাদের কোডটিকে ছোট মডিউলগুলিতে বিভক্ত করতে পারি এবং অনেক প্রোগ্রামে ব্যবহার করতে পারি। এই উপায়গুলিতে, আমরা DRY (নিজেকে পুনরাবৃত্তি করুন) নীতিটি অনুসরণ করতে পারি।

এই নিবন্ধটির জন্য এটি। আমরা স্যাশিং এবং ব্যাশে ফর্কিংয়ের মধ্যে পার্থক্যটি সংক্ষেপে আলোচনা করেছি। নিবন্ধটি মাধ্যমে যান এবং আপনার মূল্যবান প্রতিক্রিয়া আমাদের সাথে শেয়ার করুন।