অনেক লোক কমান্ড লাইন প্রম্পটকে একটি উপযোগী এলিমেন্ট বলে চিনেন না, অথবা সেটার ওপর খুব মনোযোগ দেন না। কিন্তু একটি উপযোগী প্রম্পট আপনি কমান্ড লাইন কীভাবে ব্যবহার করেন সেটা পরিবর্তন করতে পারে, এবং এর ফলস্বরূপ আপনার সিস্টেমও। এই আর্টিকেলে কিছু উপযোগী ও আকর্ষণীয় Bash প্রম্পট উদাহরণসহ দেখানো হয়েছে। নোট: আমরা প্রথমে প্রম্পটগুলো দেখাব, তারপর সেগুলো কীভাবে ব্যবহার করবেন সেটা বোঝাব।
এখানে কিছু Bash প্রম্পট দেয়া হলো, এবং সবই সিরিয়াস (serious) নয়। উদাহরণস্বরূপ, লিস্টের প্রথম এন্ট্রি কমান্ড লাইন ব্যবহার করার সময় আপনাকে একটু আনন্দ দিতে পারে!
১. সফল এক্সিকিউশনে "Kaomoji" দেখানো
এই প্রম্পট মজাদার কিন্তু উপযোগী! আইডিয়া হলো: যতক্ষণ আপনি সফল কমান্ড এক্সিকিউট করছেন, ততক্ষণ আপনার প্রম্পট একটি হ্যাপি (happy) kaomoji দেখাবে।
বিপরীতভাবে, যখন কমান্ড ফেল করবে, আপনি একটি স্যাড (sad) kaomoji দেখবেন।
এটি অ্যাপ্লাই করতে নিচের কোড ব্যবহার করুন:
PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\$ "
এটি দেখতে কনফিউজিং (confusing) লাগতে পারে, কিন্তু আমরা if স্টেটমেন্ট ব্যবহার করছি কমান্ডটি ভালো হয়েছে কিনা সেটা নির্ধারণ করতে। তারপর kaomoji-গুলো সঠিকভাবে দেখাতে কিছু এস্কেপিং (escaping) ব্যবহার করছি।
২. খারাপ কমান্ডে Bash প্রম্পটের রঙ পরিবর্তন
তর্কসঙ্গতভাবে, এই প্রম্পট লিস্টে সবচেয়ে উপযোগী। উপরের মতোই, লাস্ট কমান্ড ফেল করলে প্রম্পটের রঙ পরিবর্তন হয়, কিন্তু এছাড়া লং পাথ সংক্ষিপ্ত করে এবং প্রতিটি কমান্ডের Bash হিস্ট্রি নম্বর দেখায় সহজ রিট্রিভাল (retrieval) এর জন্য।
PROMPT_COMMAND='PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0:`hostname -s`:`pwd`\007""'
আবারও, এটি ইমপ্লিমেন্ট করা দেখতে ভয়ানক লাগতে পারে, কিন্তু এটা সহজ। আমরা আবার if স্টেটমেন্ট এবং কালার কোড ব্যবহার করছি ভিন্ন মেসেজ হাইলাইট করতে।
আপনি এই রঙগুলো আপনার ইচ্ছামতো করতে পারেন, যদিও আমরা বলব কিছু লজিক্যাল চিন্তা রেখে রঙ পরিবর্তন করুন যাতে সেগুলো আপনাকে সাহায্য করে, শুধু পরিবর্তনের জন্য পরিবর্তন না করে।
৩. Bash প্রম্পটকে একাধিক লাইনে ছড়িয়ে দেওয়া (Multi-line Prompt)
কখনো কখনো আপনি আপনার Bash প্রম্পটে অনেক ইনফো রাখতে চান। আপনি যদি সেগুলোতে আছেন, তবে এই Bash প্রম্পট আপনাকে আকর্ষণ করতে পারে। এটি তারিখ, সময়, ফুল ডিরেক্টরি পাথ, ইউজার ও হোস্ট নাম, এক্টিভ টার্মিনাল, এবং এমনকি ফাইল কাউন্ট ও স্পেস ইউজেজ (space usage) দেখায়।
PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"
এখানে if স্টেটমেন্ট দরকার নেই, কারণ প্রম্পটের লেআউট স্ট্যাটিক (static), কিন্তু কন্টেন্ট ডাইনামিক (dynamic)। আপনি এই প্রম্পটের বিভিন্ন এলিমেন্ট পার্স (parse) করা কঠিন পেতে পারেন। আমার পরামর্শ: এটি অ্যাপ্লাই করুন, তারপর প্রম্পটকে টুকরো টুকরো করে চেক করুন। একটু ক্রস-রেফারেন্সিং (cross-referencing) করলে আপনি বুঝতে পারবেন প্রম্পট কীভাবে কম্বাইন (combine) হয়।
৪. রঙ ব্যবহার করে Bash প্রম্পটকে আরও পঠনযোগ্য बनানো
এই প্রম্পটে কোনো ফ্যান্সি (fancy) জিনিস নেই, শুধু ভিন্ন ইনফরমেশন আলাদা করার জন্য রঙের ভালো ব্যবহার। আপনি দেখতে পাচ্ছেন, এটি সময়, ইউজার ও হোস্ট নাম, এবং কারেন্ট ডিরেক্টরি প্রদান করে।
PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
এটি সবচেয়ে উপযোগী Bash প্রম্পটের একটি এবং আপনি আপনার প্রম্পট কাস্টমাইজ করতে যেতে এটি প্রথমে দেখবেন। এটি আপনাকে কাস্টম প্রম্পট কীভাবে কাজ করে সেটা শিখতে একটি ভালো বেস (basis) দেবে।
৫. ফুল ডিরেক্টরি পাথ দেখানো
রঙ ব্যবহার করার মতোই, এই প্রম্পট একটি ক্লিন (clean) এবং মিনিমাল (minimal) টু-লাইন (two-line) প্রম্পট (যদিও টপে একটি ব্ল্যাঙ্ক লাইন আছে)।
আমরা প্রথম লাইনে ফুল ওয়ার্কিং ডিরেক্টরি পাথ দেখাই, এবং নিচে ইউজারকে।
PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"
আপনি যদি প্রম্পটে ব্ল্যাঙ্ক লাইন চান না, তবে প্রথম \n বাদ দিতে পারেন। তবে লেআউট এবং ফরম্যাটিংয়ের সাথে এক্সপেরিমেন্ট করুন, কারণ প্রতিটি টার্মিনাল অভিজ্ঞতা আপনার কম্পিউটার এবং কমান্ড লাইন সেটিংস অনুযায়ী ভিন্ন হবে।
৬. ব্যাকগ্রাউন্ড জব কাউন্ট (Background Job Count) দেখানো
এই টু-লাইনার (two-liner) এমন ইনফো দেখায় যা আমরা এখনও আমাদের Bash প্রম্পটে ব্যবহার করিনি। আমরা ব্যাকগ্রাউন্ড জবের একটি রানিং ট্যালি (running tally) প্রদান করছি। এটি উপযোগী হবে যদি আপনি মাল্টিটাস্ক (multitask) করেন কিন্তু যেকোনো এক্টিভিটির ওপর চোখ রাখতে চান।
প্রথম লাইনে ইউজার ও হোস্ট নাম, সাথে ওয়ার্কিং ডিরেক্টরি পাথ। দ্বিতীয় লাইনে হিস্ট্রি নম্বর (history number) এবং ব্যাকগ্রাউন্ডে চলমান জবের কাউন্ট।
PS1='\[\e[1;32m\]\u@\H:\[\e[m\] \[\e[1;37m\]\w\[\e[m\]\n\[\e[1;33m\]hist:\! \[\e[0;33m\] \[\e[1;31m\]jobs:\j \$\[\e[m\] '
এতে আরও কিছু নেই, যদিও এটি সিস্টেম এক্টিভিটির ওপর চোখ রাখতে আপনাকে খুব দরকারি ইনফো দিতে পারে। আপনি এটাকে আরও কমপ্লেক্স প্রম্পটে রূপান্তর করতে পারেন এবং if স্টেটমেন্ট ও কালার কোডিং যোগ করে জানাতে পারেন যখন জব নির্দিষ্ট লেভেলে পৌঁছেছে।
৭. ওয়ার্কিং ডিরেক্টরির ইনফরমেশন প্রদর্শন
এখানে আমরা টপ লাইনে ইউজার ও হোস্ট নাম, জব কাউন্ট, এবং তারিখ ও সময় দেখাচ্ছি। নিচের লাইনে কারেন্ট ডিরেক্টরি, সাথে ডিরেক্টরিতে কতগুলো ফাইল আছে এবং ডিস্ক ইউজেজ (disk usage) সম্পর্কিত কিছু ইনফো।
PS1="\n\[\e[30;1m\]\[\016\]l\[\017\](\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\j\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"
এই সব প্রম্পটের সাথে সবচেয়ে বড় সমস্যা হলো ফরম্যাটিং এবং এস্কেপিং (escaping) এর চারপাশে কী হচ্ছে সেটা বুঝা। কিন্তু মাল্টি-লাইন প্রম্পটের মতোই, এটাকেও টুকরো টুকরো করে तबেজ না বুঝতে পারেন যতক্ষণ পর্যন্ত আপনি ওভারঅল স্ট্রাকচার (overall structure) বুঝতে পারেন।
আপনি একবারে একটু করে ইনপুট দিতে পারেন এবং নোট করতে পারেন কী ডিসপ্লে হচ্ছে বা কী এরর আসছে, এবং ধীরে ধীরে ফুল স্নিপেট (snippet) তৈরি করতে পারেন।
৮. নিজের Bash প্রম্পট তৈরি করা
আপনি উপরের যেকোনো প্রম্পটকে কম্বাইন (combine) করে আপনার নিজস্ব কাস্টম Bash প্রম্পট বানাতে পারেন। উদাহরণস্বরূপ, এটি লিস্টের নম্বর ৭-এর একটি মডিফিকেশন (modification) কিন্তু কম স্পেস নেয় এবং কিছু স্পেসিফিক ও রেলেভেন্ট (relevant) ইনফো যোগ করে।
টু-লাইন স্টাইল (two-line style) সবসময় আরও কম্প্যাক্ট (compact), কারণ আপনি ফুল পাথ দেখতে পান কমান্ডের জন্য স্পেস কম না করেই।
PS1="\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n(\[\e[37;1m\]! \!\[\e[32;1m\])-> \[\e[0m\]"
এখন আপনি সম্ভবত বুঝতে পেরেছেন এই প্রম্পট কী করে, কিন্তু আমার পরামর্শ: আপনি নিজে তৈরি করার চেষ্টা করুন বরং এটি পেস্ট (paste) করার। তখন আপনি বুঝতে পারবেন ভিন্ন এলিমেন্টগুলো কীভাবে একসাথে কাজ করে এবং হয়তো আপনার নিজস্ব কাস্টম Bash প্রম্পট বানাতে পারবেন।
প্রশ্নোত্তর (FAQ)
১. আমি কেন ভিন্ন Bash প্রম্পট ব্যবহার করব?
এতেস্ব অনেক কারণ আছে, কিন্তু প্রোডাক্টিভিটি (productivity) একটি মূল বিবেচনা। আপনি যদি সারাক্ষণ কমান্ড লাইন ব্যবহার করেন, তবে আপনি প্রতি কয়েক সেকেন্ডে আপনার প্রম্পট দেখেন। যেহেতু, আপনি সবচেয়ে গুরুত্বপূর্ণ ইনফরমেশন সেটাতে রাখলে, আপনার হাতে সেটা সবসময় থাকবে।
অনেক কেসে, কাস্টম Bash প্রম্পট ব্যবহার করা একাধিক উইন্ডো খোলা রাখার চেয়ে আরও এফিশিয়েন্ট (efficient)।
২. এই Bash প্রম্পটগুলো আমার টার্মিনাল আউটপুটে কীভাবে যোগ করব?
এই প্রম্পটগুলো ব্যবহার করতে আপনি কোড কপি করে আপনার টার্মিনাল অ্যাপে পেস্ট করতে পারেন। তবে এটি শুধু করেন্ট সেশন (current session)-এ প্রযোজ্য হবে, তাই তত্ত্বতঃ আপনাকে টার্মিনাল লঞ্চ করার 때마다 এটি করতে হবে।
আপনি যদি পরিবর্তনটি পারম্যানেন্ট (permanent) করতে চান, তবে স্নিপেটগুলো আপনার ~/.bashrc ফাইলের শেষে পেস্ট করুন, এবং আপনার টার্মিনাল রিস্টার্ট করুন।
৩. এই Bash প্রম্পটগুলো অন্যান্য শেল (shell)-এও কাজ করবে কি?
অনেক কেসে, আপনি পাবেন অন্যান্য টাইপের শেলের সাথে ক্রস-কম্প্যাটিবিলিটি (cross-compatibility) আছে। তবে ১০০% পারিটি (parity) এর কোনো গ্যারান্টি নেই।
আমাদের Mac Terminal কাস্টমাইজেশন পোস্ট দেখলে পাবেন এটি zsh ব্যবহার করে। আপনি দেখবেন সখান কিছু মাইনর (minor) পার্থক্য আছে কিন্তু অনেক সাদৃশ্যও।
৪. আমি কীভাবে বুঝবো আমার Bash প্রম্পটে কী কী ইনফরমেশন এবং এলিমেন্ট যোগ করা যায়?
প্রায় আপনার সিস্টেমের যেকোনো এলিমেন্ট Bash প্রম্পটে দেখাতে পারা যায়। আপনাকে Bash ভ্যারিয়েবলস (variables) খুঁজে বের করতে হবে, কারণ এটাই এই বিভিন্ন এলিমেন্টগুলো "আনলক" (unlock) করে।
Linux.com ওয়েবসাইটে এটি বুঝতে একটি দুর্দান্ত রিসোর্স (resource) আছে, এবং আমরা পরামর্শ দিই আপনার কাস্টমাইজেশন সেশনের সময় সেটা হাতের নিকট রাখুন।
৫. আমি যদি আর কাস্টম Bash প্রম্পট ব্যবহার করতে না চাই তাহলে কী করব?
সহজ উত্তর: কনফিগ ফাইল খুলুন এবং রেলেভেন্ট লাইনগুলো ডিলিট করুন। আপনাকে আর কোনো কমান্ড চালাতে হবে না, যদিও টার্মিনাল রিস্টার্ট করা ভালো হতে পারে যদি আপনি আপনার এক্সপেক্টেড চেঞ্জেস দেখতে না পান।
আপনি যদি নিয়মিত কমান্ড লাইন ব্যবহার করেন, বা টার্মিনাল অ্যাপ চালু করার সময় নির্দিষ্ট চাহিদা থাকে, তবে প্রম্পট কাস্টমাইজ করা একটি দুর্দান্ত আইডিয়া হতে পারে। এতে অনেক জ্ঞান লাগে না, এবং অনেক কেসে আপনি অন্য ডেভেলপারের থেকে আপনার দরকারি প্রম্পট পেয়ে যেতে পারেন।