পিএস 1 সমস্যা, সিএলআই জগাখিচুড়ি


16

আমি একটি সাধারণ পিএস 1 এসাইনমেন্ট করেছি

PS1="\e[0;31m[\W]\$ \e[m "

আমি যা করতে চেয়েছিলাম তা হল প্রম্পট রঙ পরিবর্তন করা এবং কেবলমাত্র আপেক্ষিক পথ প্রদর্শন করা। যাইহোক এটি সিএলআইকে গোলমাল করে। উদাহরণস্বরূপ, যখন ইতিহাসটি এটির সাথে ব্রাউজ করা হয় তখন প্রদর্শনটি ক্রপ করে এবং ওভারল্যাপ করে। আমি যখন লম্বা কমান্ড টাইপ করি তখন কার্সারটি প্রম্পট ডিসপ্লেতে নিজেই ওভারল্যাপিং পর্দার শুরুতে চলে যায়। আমি কি ভুল করেছি?

উত্তর:


30

এর কারণ কারণ বাশ মনে করেন যে প্রম্পটটি তার চেয়ে লম্বা। \e[0;31mউদাহরণস্বরূপ, পালানোর ক্রমটি টার্মিনাল দ্বারা চুষে ফেলা হয়, যার ফলস্বরূপ নীচের পাঠ্যটি লাল হয়ে যায়, তবে বাশ তা জানে না। সুতরাং, আপনাকে বাশকে বলতে হবে যে অক্ষরের ক্রমটি প্রম্পটের দৈর্ঘ্যে গণনা করা উচিত নয় এবং আপনি এটিটি ঘিরে রেখে তা করেন \[ \]। আমি হার্ডকডিং টার্মিনাল এস্কেপ সিকোয়েন্সগুলির পরিবর্তে টিপুট ব্যবহার করার পরামর্শ দিই।

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

আরও জানতে বাশফ্যাউ 53 এবং টার্মিনাল কোডগুলি (এএনএসআই / ভিটি 100) পরিচিতি দেখুন।


1
আপনার নিখুঁত বর্ণনার জন্য ধন্যবাদ আমি বেশ কয়েকবার এই সমস্যা পেয়েছি এবং সমস্যাটি কোথায় ছিল তা কখনই জানতে পারি না।
বেতলিস্টা

+1, এখানে একই। যারা অন্ধভাবে এই সমাধানটি পরীক্ষা করে এবং এটি কাজ করে না তাদের জন্য, এখানে এখানে উল্লেখ করা দরকার যে ফাংশনগুলির মধ্যে রঙ পালানোর জন্য বাশফ্যাঙ্ক লিঙ্কে বর্ণিত আরও একটি বাক্য গঠন রয়েছে,, \001 \002
স্টিফেন নিডজিয়েলস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.