পাথনেম এক্সপ্যানসন

Last updated 6 months ago

আমরা পূর্ববর্তী চ্যাপ্টারগুলোতে যে ওয়াইল্ডকার্ড এর ব্যবহার দেখেছি তার পোশাকি নাম হচ্ছে পাথনেম এক্সপ্যানসন(pathname expansion)। মনে করি, এই আমাদের হোম ডিরেক্টরির অবস্থা:

me@howtocode-pc:~$ ls
8_1.pdf land_of_lisp pvim
8_1.pdf.aria2 ls python
AioServer3.4.2_portable ls-e-books.txt RemoteControlServer
AioServer3.4.2_portable.zip ls-error.txt reus
archives ls-home.txt sd2bk
Audiobooks ls-music.txt sent
bin ls-output.txt sh_howtocode
Desktop ls.txt spiral
diary mlterm-3.3.8 Templates
diary~ mlterm-3.3.8.tar.gz test
Documents Music test.html
Downloads Pictures test.html~
emacs playground test.md
emacs.pdf playlists TLCL-13.07.pdf
get?ab=128 Podcasts txt
hfjava Porteus-KDE-v3.0.1-i486.iso ubuntu-gnome-14.04-desktop-amd64.iso
hfjavafinalsamples precise-5.7.1.iso Videos
hfjavafinalsamples.zip precise-5.7.1.iso.aria2 আমাদের কথা
hfpython Public

echo কমান্ডের আর্গুমেন্ট হিসেবে কোনো টেক্সট দিলে echo সেটাকে হুবহু আউটপুট দেয়। কিন্তু আমরা যদি echo এর আর্গুমেন্টের মধ্যে ওয়াইল্ডকার্ড ব্যবহার করি তাহলে echo কমান্ডটি ls এর মত কাজ করবে:

me@howtocode-pc:~$ echo D*
Desktop Documents Downloads

echo আসলে কি করলো? আসুন একটু ভেবে দেখি।

  • মনে রাখতে হবে কমান্ডের কাছে আর্গুমেন্ট কিন্তু শেল পৌঁছে দেয়। তাই শেল প্রথমে আমাদের কমান্ড স্টেটমেন্টটি পরীক্ষা করেছে। শেল দেখেছে যে আমরা আর্গুমেন্ট হিসেেবে 'D' ব্যবহার করেছি। এবং '' চিহ্নকে ওয়াইল্ডকার্ড হিসেবে চিহ্নিত করেছে। শেল ভেবে নিয়েছে echo এর কাছে এই আর্গুমেন্ট এক্সপ্যান্ড করে পাঠানো উচিৎ।

  • এক্সপ্যানশনের সিদ্ধান্ত নেয়ার পর শেল খুঁজে বের করেছ যে আমাদের এখনকার ডিরেক্টরি বা হোমে এই এক্সপ্রেশন অর্থাৎ D* এর সাথে কোনগুলো মেলে। অর্থাৎ কোন আইটেমগুলোর শুরুতে D আছে। শেল তখন Desktop, Documents ও Downloads এই তিনটি আইটেম খুঁজে পেয়েছে।

  • শেল ওয়াইল্ডকার্ড এক্সপ্রেশন অনুযায়ী পাওয়া আইটেমগুলো বর্ণানুক্রমে সাজিয়ে echo এর জন্য আর্গুমেন্ট তৈরি করলো। আরগুমেন্টটা হল 'Desktop Documents Downloads'। এইপর্যন্ত যা যা হলো তা হলো এক্সপ্যানসন।

  • এবার শেল echo কমান্ডের সাথে আর্গুমেন্ট জুড়ে দিয়ে সত্যিকারের কমান্ডটি তৈরি করলো এরকম: echo Desktop Documents Downloads। এবং এটি এক্সিকিউট করলো।

  • এতক্ষন echo কমান্ডটি কিছুই করেনি। বরং যা যা করার শেল নিজেই করেছে। এবার echo তাকে আর্গুমেন্টে দেয়া টেক্সট অর্থাৎ 'Desktop Documents Downloads' স্ক্রীনে প্রিন্ট করে দিলো।

টিল্ডে এক্সপ্যানসন

পাথনেম এক্সপ্যানসনের আরেকটি বিশেষ রূপ টিল্ডে এক্সপ্যানসন(Tilde expansion)। আপনাদের হয়ত মনে আছে আমরা হোম ডিরেক্টরির বদলে '~' চিহ্ন ব্যবহার করেছি। এটা টিল্ডে এক্সপ্যানসনের উদাহরণ। শুধু '~' ব্যবহার করলে:

me@howtocode-pc:~$ echo ~
/home/me
me@howtocode-pc:~$ cd ~/Music/
me@howtocode-pc:~/Music$ pwd
/home/me/Music

প্রথমে echo ~ কমান্ড দিয়ে দেখে নিলাম '~' এর মান। শেল '~' কে এক্সপ্যান্ড করে /home/me বানিয়েছে। তারপর আমরা cd ~/Music/ কমান্ড দিয়ে ~/Music ডিরেক্টরিতে ঢুকে pwd দিয়ে ওয়ার্কিং ডিরেক্টরি দেখলাম /home/me/Music। অর্থাৎ সবক্ষেত্রেই ~ এর মান /home/me। আমরা বলতে পারি '~' চিহ্ন ব্যবহার করলে তা বর্তমান ইউজারের হোম ডিরেক্টরি বুঝায়।

এবার মনে করি nishadsingha বলে একজন ইউজার আছে এই কম্পিউটারে। আমরা তার ফাইলপত্র নাড়াচাড়া করতেও '~' ব্যবহার করতে পারি তার ইউজারনেমের সাথে যুক্ত করে:

me@howtocode-pc:~$ echo ~nishadsingha
/home/nishadsingha
me@howtocode-pc:~$ cd ~nishadsingha/Music/
me@howtocode-pc:~/Music$ pwd
/home/nishadsingha/Music

প্রথমে আমরা echo ~nishadsingha কমান্ড দিয়েছি। যার ফলে ওই ইউজারের হোম ডিরেক্টরি দেখিয়েছে। এরপর cd ~nishadsingha/Music/ কমান্ড দিয়ে সরাসরি তার Music ফোল্ডারে গিয়েছি। pwd কমান্ডের আউটপুটে তার প্রমাণ মেলে।