প্রোগ্রাম কনফিগারেশন কোড থেকে আলাদা রাখা গুরুত্বপূর্ণ। এটি নন-প্রোগ্রামারদের প্রোগ্রামের কোড মডিফাই না করে কনফিগারেশন পরিবর্তন করতে সক্ষম করে। কম্পাইল্ড বাইনারি এক্সিকিউটেবলের সাথে, এটি নন-প্রোগ্রামারদের জন্য অসম্ভব কারণ এতে শুধু সোর্স ফাইল অ্যাক্সেসই দরকার নয় (যা ওপেন সোর্স প্রোগ্রামের সাথে আপনার আছে) বরং একটি প্রোগ্রামারের স্কিল সেটও দরকার। বয়স মানুষ সেটি পায় না, এবং অধিকাংশ মানুষ শিখতে চায় না।
Bash-এর মতো শেল ল্যাঙ্গুয়েজের সাথে, সোর্স কোড অ্যাক্সেস ডেফিনিশন অনুযায়ী উপলব্ধ কারণ শেল স্ক্রিপ্ট কম্পাইল হয় না বাইনারি ফরম্যাটে। সেটাও সত্ত্বেও, নন-প্রোগ্রামারদের শেল স্ক্রিপ্টের মধ্যে ঘুরে ফিরে সেগুলো পরিবর্তন করার ইডিয়া ভালো নয়। এমনকি জ্ঞানী ডেভেলপার এবং সিসাডমিনরা অকারণ পরিবর্তন করতে পারেন যা এরর বা বদতর ফলাফল দেয়।
তাই সহজে মেইনটেইন হওয়া টেক্সট ফাইলে কনফিগারেশন আইটেম রাখা বিচ্ছিন্নতা প্রদান করে এবং নন-প্রোগ্রামারদের কোডে অনিচ্ছাকৃত পরিবর্তন করার খত্রা ছাড়া কনফিগারেশন এলিমেন্ট এডিট করতে দেয়। অনেক ডেভেলপার কম্পাইল্ড ল্যাঙ্গুয়েজে লেখা প্রোগ্রামের জন্য এটা করেন কারণ তারা ইউজারদের ডেভেলপার হোনা আশা করেন না। उन्हीं অনেক কারণের জন্য, ইন্টারপ্রেটেড শেল ল্যাঙ্গুয়েজের জন্যও এটা সেন্স মেক করে।
সাধারণ পদ্ধতি
অনেক ভাষার মত, আপনি একটি Bash প্রোগ্রামের জন্য কোড লিখতে পারেন যা ASCII টেক্সট কনফিগারেশন ফাইল পড়ে এবং পার্স করে, ভেরিয়েবল নাম পড়ে, এবং প্রোগ্রাম কোড এক্সিকিউট হওয়ার সাথে সাথে ভ্যালু সেট করে। উদাহরণস্বরূপ, একটি কনফিগারেশন ফাইল এতে দেখতে পারে:
var1=LinuxGeek46 var2=Opensource.com
প্রোগ্রামটি সেটি ফাইল পড়বে, প্রতিটি লাইন পার্স করবে, এবং প্রতিটি ভেরিয়েবলে ভ্যালু সেট করবে।
Sourcing
Bash একটি অনেক সহজ মেথড ব্যবহার করে পার্সিং এবং ভেরিয়েবল সেট করার জন্য যাকে sourcing বলে। একটি এক্সিকিউটেবল শেল প্রোগ্রাম থেকে এক্সটার্নাল ফাইল সোর্স করা সেটি ফাইলের কন্টেন্ট একটি শেল প্রোগ্রামে পুরোপুরি অন্তর্ভুক্ত করার একটি সিম্পল মেথড। এক সেন্সে, এটি কম্পাইল্ড ল্যাঙ্গুয়েজ include স্টেটমেন্টের খুব মিলتی যা।
যা রানটাইমে লাইব্রেরি ফাইল ইনক্লুড করে। যেস একটি ফাইল যেকোনো ধরনের Bash কোড অন্তর্ভুক্ত করতে পারে, ভেরিয়েবল অ্যাসাইনমেন্ট সহ।
স্বাভাবিকভাবে, ব্যাখ্যা করার চেয়ে ডেমো করাই সহজ।
প্রথমে, একটি ~/bin ডিরেক্টরি তৈরি করুন (যদি ইতিমধ্যে না থাকে), এবং সেটি প্রেজেন্ট ওয়ার্কিং ডিরেক্টরি (PWD) বানান। লিনাক্স ফাইলসিস্টেম হায়ারার্কিক্যাল স্ট্যান্ডার্ড ~/bin-কে ইউজারদের তাদের এক্সিকিউটেবল ফাইল সংরক্ষণ করার উপযুক্ত জায়গা হিসেবে ডিফাইন করে।
এই ডিরেক্টরিতে একটি নতুন ফাইল তৈরি করুন। নাম দিন main এবং এক্সিকিউটেবল বানান:
[dboth@david bin]$ touch main [dboth@david bin]$ chmod +x main [dboth@david bin]$
এই এক্সিকিউটেবল ফাইলে নিচের কন্টেন্ট যোগ করুন:
#!/bin/bash Name="LinuxGeek" echo $Name
এই Bash প্রোগ্রাম এক্সিকিউট করুন:
[dboth@david bin]$ ./main LinuxGeek [dboth@david bin]$
একটি নতুন ফাইল তৈরি করুন এবং নাম দিন ~/bin/data। এই ফাইলটিকে এক্সিকিউটেবল হতে হবে না। এতে নিচের ইনফরমেশন যোগ করুন:
# Sourced code and variables echo "This is the sourced code from the data file." FirstName="David" LastName="Both"
main প্রোগ্রামে তিন লাইন যোগ করুন যেন সেটি এভাবে দেখে:
#!/bin/bash Name="LinuxGeek" echo $Name source ~/bin/data echo "First name: $FirstName" echo "LastName: $LastName"
প্রোগ্রামটি রি-রান করুন:
[dboth@david bin]$ ./main LinuxGeek This is the sourced code from the data file. First name: David LastName: Both [dboth@david bin]$
সোর্সিং সম্পর্কে একটা আরো কুল জিনিস জানতে পারেন। আপনি একটি সিঙ্গেল ডট (.) ব্যবহার করতে পারেন source কমান্ডের শর্টকাট হিসেবে। main ফাইলটি চেঞ্জ করুন . সাবস্টিটিউট করে source-এর জায়গায়:
#!/bin/bash Name="LinuxGeek" echo $Name . ~/bin/data echo "First name: $FirstName" echo "LastName: $LastName"
এবার প্রোগ্রামটি আবার রান করুন। রেজাল্ট আগের রানের মতই এক্সাক্টলি হওয়া উচিত।
Bash শুরু করা
Bash ব্যবহার করে যেকোনো লিনাক্স হোস্ট – যেটি প্রায় সব তাদের ডিফল্ট শেল হিসেবে Bash ব্যবহার করে – কিছু চমৎকার, বিল্ট-ইন সোর্সিং উদাহরণ অন্তর্ভুক্ত করে।
যখন একটি Bash শেল শুরু হয়, এর এনভায়রনমেন্ট কনফিগার করা দরকার যাতে সেটি ইউজেবল হয়। পাঁচটি মূল ফাইল এবং এক ডিরেক্টরি আছে যা Bash এনভায়রনমেন্ট কনফিগার করতে ব্যবহৃত হয়। সেগুলো নিচে তাদের মূল ফাংশনসহ লিস্ট করা হলো:
/etc/profile: সিস্টেম-ওয়াইড এনভায়রনমেন্ট এবং স্টার্টআপ প্রোগ্রাম/etc/bashrc: সিস্টেম-ওয়াইড ফাংশন এবং এলিয়াস/etc/profile.d/: ডিরেক্টরি যেটি সিস্টেম-ওয়াইড স্ক্রিপ্ট ধারণ করে যেগুলো বিভিন্ন কমান্ড-লাইন টুল কনফিগার করে যেমনvimএবংmcএবং যেকোনো কাস্টম কনফিগারেশন স্ক্রিপ্ট যা একটি সিসাডমিন তৈরি করে~/.bash_profile: ইউজার-স্পেসিফিক এনভায়রনমেন্ট এবং স্টার্টআপ প্রোগ্রাম~/.bashrc: ইউজার-স্পেসিফিক এলিয়াস এবং ফাংশন~/.bash_logout: ইউজার-স্পেসিফিক কমান্ড যা ইউজার লগ আউট করলে এক্সিকিউট হবে
এই ফাইলগুলোর এক্সিকিউশন সিকোয়েন্স ট্রেস করার চেষ্টা করুন এবং নির্ধারণ করুন নন-লগইন Bash ইনিশিয়ালাইজেশন vs লগ-ইন Bash ইনিশিয়ালাইজেশনের জন্য কোন সিকোয়েন্স ব্যবহার হয়। আমি এটা করেছি আমার লিনাক্স ট্রেনিং সিরিজ, Using and administering Linux: Zero to sysadmin-এর ভলিউম ১-এ চ্যাপ্টার ১৭-এ।
আপনাকে একটা হিন্ট দিচ্ছি। সব শুরু হয় ~/.bashrc স্ক্রিপ্ট থেকে।
উপসংহার
এই আর্টিকেলে Bash প্রোগ্রামে কোড এবং ভেরিয়েবল অ্যাসাইনমেন্ট পুল করার জন্য সোর্সিং এক্সপ্লোর করা হয়েছে। কনফিগারেশন ফাইল থেকে ভেরিয়েবল পার্স করার এই মেথড ফাস্ট, সহজ, এবং ফ্লেক্সিবল। এটি Bash কোডকে ভেরিয়েবল অ্যাসাইনমেন্ট থেকে আলাদা করার একটি মেথড প্রদান করে যাতে নন-প্রোগ্রামাররা সেস ভেরিয়েবলদের ভ্যালু সেট করতে পারে।