এই নিবন্ধের মূল ফোকাস হল স্পষ্টভাবে বোঝা যে আপনি যখন স্ক্রিপ্ট বনাম উৎস চালান তখন কী ঘটে ব্যাশে স্ক্রিপ্ট। প্রথমত, আপনি যখন বিভিন্ন উপায়ে স্ক্রিপ্ট কল করেন তখন আমরা কীভাবে প্রোগ্রামটি জমা দেওয়া হয় তা স্পষ্টভাবে বুঝতে পারব।
দ্রষ্টব্য :একটি এক্সটেনশন দিয়ে স্ক্রিপ্ট তৈরি করা কোন ব্যাপার না। এক্সটেনশন ছাড়াও স্ক্রিপ্ট ঠিকঠাক চলবে।
মূলত, প্রতিটি স্ক্রিপ্ট শেবাং(#!) নামে একটি লাইন দিয়ে শুরু হয় . হ্যাশ বাশ-এর প্রতীককে মন্তব্য হিসেবে ব্যাখ্যা করা হবে কিন্তু শেবাং একটি বিশেষ অর্থ আছে। এটি ব্যাশকে বলে যে আপনি শেবাং-এ উল্লেখ করেছেন যে কোনো দোভাষীতে প্রোগ্রাম জমা দিতে .
নীচে একটি নমুনা প্রোগ্রাম এবং আমি আমার দোভাষী হিসাবে bash নির্দিষ্ট করছি৷
$ cat >> Hello_World.sh #!/usr/bin/env bash echo "Hello world" $ chmod +x Hello_world.sh
এখন স্ক্রিপ্ট চালানোর জন্য, আপনি এটি দুটি উপায়ে করতে পারেন।
- স্ক্রিপ্ট কল করার জন্য একটি আপেক্ষিক পথ ব্যবহার করুন। যে ডিরেক্টরিতে স্ক্রিপ্টটি উপস্থিত রয়েছে সেখানে যান এবং ./Hello_world.sh চালান .
- স্ক্রিপ্ট কল করার জন্য পরম পথ ব্যবহার করুন। ফাইল সিস্টেমের যেকোনো স্থান থেকে স্ক্রিপ্টের সম্পূর্ণ পথ টাইপ করুন।
$ ./Hello_world.sh $ pwd $ /home/karthick/Hello_world
এখন দেখা যাক যখন আপনি শেবাং ছাড়া আপনার প্রোগ্রাম জমা দেওয়ার চেষ্টা করেন তখন কী ঘটে . শেবাং এর অনুপস্থিতিতে , প্রোগ্রামটি আপনি যে বর্তমান শেল দিয়ে চালাচ্ছেন তাতে জমা দেওয়া হবে, আমার ক্ষেত্রে, এটি Bash (/bin/bash )।
আমাকে একটি উদাহরণ প্রদর্শন করা যাক. আমি শেবাং ছাড়াই একটি পাইথন স্ক্রিপ্ট তৈরি করছি এবং যখন আমি প্রোগ্রাম কল করি, bash জানে না যে এটি এই প্রোগ্রামটিকে পাইথন ইন্টারপ্রেটারে জমা দিতে হবে পরিবর্তে এটি বর্তমান শেলে প্রোগ্রামটি চালাবে৷
$ 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
স্ক্রিপ্টের একটি অংশ হিসাবে একাধিক চাইল্ড প্রক্রিয়া থাকতে পারে এবং এটি আমাদের কোডের উপর নির্ভর করে। এটি উল্লেখ্য যে সাবস্ক্রিপ্ট দ্বারা তৈরি পরিবেশগত ভেরিয়েবলগুলি শেষ হয়ে গেলে বাদ দেওয়া হবে। একটি শিশু প্রক্রিয়া অভিভাবক প্রক্রিয়া দ্বারা তৈরি ভেরিয়েবলগুলি রপ্তানি করে অ্যাক্সেস করতে পারে। কিন্তু অভিভাবক প্রক্রিয়া শিশু প্রক্রিয়া দ্বারা তৈরি ভেরিয়েবল অ্যাক্সেস করতে পারে না।
ভেরিয়েবলগুলি কীভাবে কাজ করে এবং কীভাবে ভেরিয়েবলগুলি রপ্তানি করতে হয় সে সম্পর্কে আরও বুঝতে নীচের নিবন্ধগুলি দেখুন৷
- শেল স্ক্রিপ্টিং-এ 'লিনাক্স ভেরিয়েবল' বোঝা এবং লেখা
- ব্যাশে $$ এবং $BASHPID-এর মধ্যে পার্থক্য জানুন
স্ক্রিপ্ট সোর্সিং
“উৎস ” হল একটি শেল বিল্ট-ইন কমান্ড যা এটিতে একটি যুক্তি হিসাবে পাস করা ফাইলটি পড়ে এবং বর্তমান শেল পরিবেশে কোড চালায়। একটি উপযুক্ত ব্যবহারের ক্ষেত্রে যা আপনি বেশিরভাগই ব্যবহার করেন তা হল .bashrc
-এ আপনার কনফিগারেশন পরিবর্তন করা অথবা .bash_profile
এবং সোর্স কমান্ড ব্যবহার করে পরিবর্তনগুলি পুনরায় লোড করা হচ্ছে .
$ type -a source
সোর্স কমান্ড চালানোর দুটি সিনট্যাকটিক উপায় আছে . আপনি দুটি সিনট্যাক্স থেকে যে কাউকে বেছে নিতে পারেন এবং এটি ব্যক্তিগত পছন্দের।
$ source FILE_NAME [ARGUMENTS] $ . FILE_NAME [ARGUMENTS]
আমাকে উত্স আসলে কিভাবে কাজ করে প্রদর্শন করা যাক. আমি দুটি শেল স্ক্রিপ্ট তৈরি করতে যাচ্ছি। প্রথম স্ক্রিপ্ট (Module.sh ) কিছু ভেরিয়েবল এবং ফাংশন রাখা যাচ্ছে. দ্বিতীয় স্ক্রিপ্ট (Main.sh ) ভেরিয়েবল প্রিন্ট করতে যাচ্ছে এবং ফাংশনটিকে কল করতে যাচ্ছে।
ফাইল Module.sh .
#!/usr/bin/env bash VAR1=$(echo "Welcome to $1") function f1(){ echo “Function f1 is called” }
ফাইল Main.sh .
#!/usr/bin/env bash echo $VAR1 f1
স্ক্রিপ্টের জন্য সম্পাদনের অনুমতি সেট করুন এবং মূল স্ক্রিপ্টকে কল করুন “main.sh” . এখন, এই স্ক্রিপ্টটি f1
ফাংশনটি খুঁজে বের করার চেষ্টা করবে এবং পরিবর্তনশীল VAR1
বর্তমান শেল পরিবেশে এবং পাওয়া যায়নি কমান্ডের সাথে ব্যর্থ হবে।
$ bash main.sh
এখন স্ক্রিপ্টের ভিতরে সোর্স কমান্ডটি চালান যা বর্তমান শেল পরিবেশে ভেরিয়েবল এবং ফাংশনগুলিকে লোড করবে এবং এটি “main.sh” দ্বারা অ্যাক্সেসযোগ্য হবে। .
ফাইল Module.sh .
#!/usr/bin/env bash VAR1=$(echo "Welcome to $1") function f1(){ echo "Function f1 is called" }
ফাইল Main.sh .
#!/usr/bin/env bash source module.sh Tecmint echo $VAR1 f1
এখন স্ক্রিপ্টটি আবার চালান এবং দেখুন।
$ bash main.sh
উৎস bash-এ খুবই উপযোগী আমাদের শেল স্ক্রিপ্ট তৈরিতে মডুলার প্রোগ্রামিং পদ্ধতি অনুসরণ করতে। আমরা আমাদের কোডকে ছোট ছোট মডিউলে বিভক্ত করতে পারি এবং অনেক প্রোগ্রামে ব্যবহার করা যেতে পারে। এই উপায়ে, আমরা DRY অনুসরণ করতে পারি (নিজেকে পুনরাবৃত্তি করবেন না ) নীতি।
এই নিবন্ধের জন্য এটি। আমরা বাশে সোর্সিং এবং ফর্কিংয়ের মধ্যে পার্থক্য সংক্ষেপে আলোচনা করেছি। নিবন্ধটি দেখুন এবং আপনার মূল্যবান মতামত আমাদের সাথে শেয়ার করুন।