আপনার লিনাক্স ব্যাশ শেলের সাথে ইন্টারঅ্যাকশন খুব সুন্দর হবে, যদি আপনি PS1, PS2, PS3, PS4, এবং PROMPT_COMMAND কার্যকরভাবে ব্যবহার করেন। PS står করে প্রম্পট স্টেটমেন্ট। এই আর্টিকেলটি লিনাক্স কমান্ড প্রম্পট এনভায়রনমেন্ট ভেরিয়েবলগুলোর উপর একটি জাম্পস্টার্ট দেবে সিম্পল উদাহরণ দিয়ে।
১. PS1 – ডিফল্ট ইন্টারঅ্যাকশন প্রম্পট
আপনার লিনাক্সের ডিফল্ট ইন্টারঅ্যাক্টিভ প্রম্পট নিচের মত মডিফাই করা যায় কিছু উপযোগী এবং ইনফরমেটিভ করার জন্য। নিচের উদাহরণে, ডিফল্ট PS1 ছিল “\s-\v\$”, যা শেলের নাম এবং ভার্সন নম্বর দেখাত। আমরা এই ডিফল্ট আচরণ পরিবর্তন করব ইউজারনেম, হোস্টনেম এবং বর্তমান ওয়ার্কিং ডিরেক্টরি নাম দেখানোর জন্য নিচের মত।
-bash-3.2$ export PS1="\u@\h \w> " ramesh@dev-db ~> cd /etc/mail ramesh@dev-db /etc/mail> [Note: Prompt changed to "username@hostname current-dir>" format]
এই উদাহরণে ব্যবহৃত PS1 কোডগুলো:
- \u – ইউজারনেম
- \h – হোস্টনেম
- \w – বর্তমান ডিরেক্টরির ফুল পাথনেম। দয়া করে নোট করুন যে হোম ডিরেক্টরিতে থাকলে এটি শুধু ~ দেখাবে যেমন উপরে দেখানো হয়েছে
- PS1-এর মানের শেষে একটি স্পেস আছে। ব্যক্তিগতভাবে, আমি প্রম্পটের শেষে স্পেস পছন্দ করি ভালো রিডেবিলিটির জন্য।
এই সেটিং পারমানেন্ট করতে export PS1=”\u@\h \w> ” .bash_profile (অথবা) .bashrc-এ যোগ করুন নিচের মত।
ramesh@dev-db ~> vi ~/.bash_profile (or) ramesh@dev-db ~> vi ~/.bashrc [Note: Add export PS1="\u@\h \w> " to one of the above files]
পরবর্তী পোস্টে, আমি PS1 ব্যবহারের অনেক প্র্যাক্টিক্যাল উদাহরণ বিস্তারিত লিখব।
২. PS2 – কন্টিনুয়েশন ইন্টারঅ্যাক্টিভ প্রম্পট
খুব বড় ইউনিক্স কমান্ডকে \ দিয়ে লাইন শেষে দিয়ে একাধিক লাইনে ভাঙা যায়। 멀티-লাইন কমান্ডের ডিফল্ট ইন্টারঅ্যাক্টিভ প্রম্পট হলো “> “। PS2 এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে এই ডিফল্ট আচরণ পরিবর্তন করি “continue->” দেখানোর জন্য নিচের মত।
ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \ > --key_buffer_size=512M --sort_buffer_size=512M \ > --read_buffer_size=4M --write_buffer_size=4M \ > /var/lib/mysql/bugs/*.MYI [Note: This uses the default ">" for continuation prompt]
ramesh@dev-db ~> export PS2="continue-> " ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \ continue-> --key_buffer_size=512M --sort_buffer_size=512M \ continue-> --read_buffer_size=4M --write_buffer_size=4M \ continue-> /var/lib/mysql/bugs/*.MYI [Note: This uses the modified "continue-> " for continuation prompt]
আমি এটি খুব হেল্পফুল এবং সহজে পড়ার উপযুক্ত পেলাম, যখন আমি আমার লং কমান্ডগুলো \ দিয়ে একাধিক লাইনে ভাঙি। আমি অন্যদেরও দেখেছি যারা লং কমান্ড ভাঙতে পছন্দ করেন না। আপনার পছন্দ কী? আপনি কি লং কমান্ড একাধিক লাইনে ভাঙতে পছন্দ করেন?
৩. PS3 – শেল স্ক্রিপ্টের ভিতরে “select”-এর জন্য ব্যবহৃত প্রম্পট
আপনি শেল স্ক্রিপ্টের ভিতরে select লুপের জন্য একটি কাস্টম প্রম্পট ডিফাইন করতে পারেন PS3 এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে, নিচের মত ব্যাখ্যা করা হয়েছে।
PS3 ছাড়া শেল স্ক্রিপ্ট এবং আউটপুট:
ramesh@dev-db ~> cat ps3.sh select i in mon tue wed exit do case $i in mon) echo "Monday";; tue) echo "Tuesday";; wed) echo "Wednesday";; exit) exit;; esac done ramesh@dev-db ~> ./ps3.sh 1) mon 2) tue 3) wed 4) exit #? 1 Monday #? 4 [Note: This displays the default "#?" for select command prompt]
PS3 সহ শেল স্ক্রিপ্ট এবং আউটপুট:
ramesh@dev-db ~> cat ps3.sh PS3="Select a day (1-4): " select i in mon tue wed exit do case $i in mon) echo "Monday";; tue) echo "Tuesday";; wed) echo "Wednesday";; exit) exit;; esac done ramesh@dev-db ~> ./ps3.sh 1) mon 2) tue 3) wed 4) exit Select a day (1-4): 1 Monday Select a day (1-4): 4 [Note: This displays the modified "Select a day (1-4): " for select command prompt]
৪. PS4 – “set -x” দ্বারা ট্রেসিং আউটপुटে প্রিফিক্স হিসেবে ব্যবহৃত
PS4 শেল ভেরিয়েবলটি সেই প্রম্পট ডিফাইন করে যা দেখানো হয়, যখন আপনি একটি শেল স্ক্রিপ্ট ডিবাগ মোডে এক্সিকিউট করেন নিচের মত।
PS4 ছাড়া শেল স্ক্রিপ্ট এবং আউটপুট:
ramesh@dev-db ~> cat ps4.sh set -x echo "PS4 demo script" ls -l /etc/ | wc -l du -sh ~ ramesh@dev-db ~> ./ps4.sh ++ echo 'PS4 demo script' PS4 demo script ++ ls -l /etc/ ++ wc -l 243 ++ du -sh /home/ramesh 48K /home/ramesh [Note: This displays the default "++" while tracing the output using set -x]
PS4 সহ শেল স্ক্রিপ্ট এবং আউটপুট:
নিচে ps4.sh-এ ডিফাইন করা PS4-তে নিচের দুটি কোড আছে:
- $0 – স্ক্রিপ্টের নাম নির্দেশ করে
- $LINENO – স্ক্রিপ্টের ভিতরে বর্তমান লাইন নম্বর দেখায়
ramesh@dev-db ~> cat ps4.sh export PS4='$0.$LINENO+ ' set -x echo "PS4 demo script" ls -l /etc/ | wc -l du -sh ~ ramesh@dev-db ~> ./ps4.sh ../ps4.sh.3+ echo 'PS4 demo script' PS4 demo script ../ps4.sh.4+ ls -l /etc/ ../ps4.sh.4+ wc -l 243 ../ps4.sh.5+ du -sh /home/ramesh 48K /home/ramesh [Note: This displays the modified "{script-name}.{line-number}+" while tracing the output using set -x]
৫. PROMPT_COMMAND
ব্যাশ শেল PS1 ভেরিয়েবল দেখানোর ঠিক আগে PROMPT_COMMAND-এর কনটেন্ট এক্সিকিউট করে।
ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S" 22:08:42 ramesh@dev-db ~> [Note: This displays the PROMPT_COMMAND and PS1 output on different lines]
যদি আপনি PROMPT_COMMAND-এর মান PS1-এর সাথে একই লাইনে দেখাতে চান, তবে echo -n ব্যবহার করুন নিচের মত।
ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]" [22:08:51]ramesh@dev-db ~> [Note: This displays the PROMPT_COMMAND and PS1 output on the same line]
যদি আপনি এই আর্টিকেলটি পছন্দ করেন, দয়া করে এটিকে del.icio.us and Stumble করুন নিচের 'What Next?' সেকশনে দেওয়া লিংক ব্যবহার করে।