কম্পিউটার

ব্যাশ শেল:PS1, PS2, PS3, PS4 এবং PROMPT_COMMAND এর নিয়ন্ত্রণ নিন

ব্যাশ শেল:PS1, PS2, PS3, PS4 এবং PROMPT_COMMAND এর নিয়ন্ত্রণ নিনলিনাক্স ব্যাশ শেলের সাথে আপনার মিথস্ক্রিয়া খুব আনন্দদায়ক হয়ে উঠবে, যদি আপনি PS1, PS2, PS3, PS4, এবং ব্যবহার করেন PROMPT_COMMAND কার্যকরভাবে। PS এর অর্থ হল প্রম্পট স্টেটমেন্ট। এই নিবন্ধটি আপনাকে সহজ উদাহরণ ব্যবহার করে Linux কমান্ড প্রম্পট এনভায়রনমেন্ট ভেরিয়েবলের উপর একটি জাম্প স্টার্ট দেবে।

1. 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 এর মানের শেষে একটি স্পেস আছে। ব্যক্তিগতভাবে, আমি ভাল পঠনযোগ্যতার জন্য প্রম্পটের শেষে একটি স্থান পছন্দ করি।

.bash_profile (বা) .bashrc-এ এক্সপোর্ট PS1=”\u@\h \w> ” যোগ করে এই সেটিংটিকে স্থায়ী করুন।

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 ব্যবহারের বেশ কয়েকটি ব্যবহারিক উদাহরণ সম্পর্কে লিখব।

2. 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]

যখন আমি \ ব্যবহার করে আমার দীর্ঘ কমান্ডগুলিকে একাধিক লাইনে ভাঙ্গি তখন আমি এটিকে খুব সহায়ক এবং পড়া সহজ বলে মনে করি। আমি অন্যদেরও দেখেছি যারা লং কমান্ড ব্রেক আপ করতে পছন্দ করেন না। আপনার পছন্দ কি? আপনি কি দীর্ঘ কমান্ডকে একাধিক লাইনে বিভক্ত করতে চান?

<কেন্দ্র>

3. PS3 - শেল স্ক্রিপ্টের ভিতরে "নির্বাচন" দ্বারা ব্যবহৃত প্রম্পট

আপনি 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]

4. 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]

5. 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]

আপনি যদি PS1-এর মতো একই লাইনে PROMPT_COMMAND-এর মান প্রদর্শন করতে চান, তাহলে নিচের মতো ইকো -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 এবং Stumble এ বুকমার্ক করুন নিচের দেওয়া লিঙ্কটি ব্যবহার করে, 'পরবর্তী কী?' বিভাগের অধীনে।


  1. ব্যাশে $$ এবং $BASHPID এর মধ্যে পার্থক্য জানুন

  2. ব্যাশ-ইট - আপনার স্ক্রিপ্ট এবং উপনাম নিয়ন্ত্রণ করতে ব্যাশ ফ্রেমওয়ার্ক

  3. jm-shell - একটি অত্যন্ত তথ্যপূর্ণ এবং কাস্টমাইজড ব্যাশ শেল

  4. ব্যাশ শেল PS1:অ্যাঞ্জেলিনা জোলির মতো আপনার লিনাক্স প্রম্পট তৈরি করার 10 উদাহরণ