ইতিহাস স্ক্রোল করার সময় কেন এই ব্যাশ প্রম্পটটি কখনও কখনও পূর্ববর্তী আদেশগুলির অংশ রাখে?


29

আমার বাশ প্রম্পট, যা আমি স্বীকার করব যে আমি কয়েকটি জায়গা থেকে চুরি করেছি এবং একসাথে আবদ্ধ হয়েছি, কখনও কখনও উপরের / নীচে তীরগুলির সাহায্যে ব্যাশ ইতিহাসকে স্ক্রোল করার সময় পূর্ববর্তী কমান্ডগুলির অংশটি তার দৈর্ঘ্যে যুক্ত করে দেবে।

উদাহরণস্বরূপ, যদি আমার পূর্ববর্তী আদেশগুলি ছিল:

ls
cd /home/caleb
vim .bashrc

যখন আমি আমার প্রম্পটে ছিলাম এবং দু'বার স্ক্রোল করেছিলাম তখন দেখতে এটি দেখতে পারা যায়:

im vim .bcd / home / caleb

যেখানে শেষ কমান্ড থেকে প্রথম পাঁচটি অক্ষর বাকী রয়েছে।

কেন এমনটি হচ্ছে এবং কীভাবে এটি বন্ধ করা যেতে পারে তার কোনও ধারণা আছে?

আমার প্রম্পটটি এই কোডটি দিয়ে সেট করা হয়েছে (এখানে অন্তর্ভুক্ত করার জন্য দীর্ঘতর উপায়): https://gist.github.com/1679352


1
পুরো ভিসিএস ক্রেপ ছাড়াই পিএস 1 একটি মানে সেট করুন এবং দেখুন কী ঘটে। এটা আমার অনুমান।
ড্যানিয়েল বেক

আপনি কি আপনার প্রম্পটে ইতিমধ্যে অপরাধীকে খুঁজে পেয়েছেন? আমি একই সমস্যা হচ্ছে।
acme

হ্যাঁ বাশ এটি রঙগুলিতে হারিয়ে ফেলে এবং দৃশ্যমান স্ট্রিংয়ের দৈর্ঘ্য থেকে রঙের পাতাগুলির সাথে স্ট্রিংগুলির দৈর্ঘ্য পৃথক করতে অক্ষম। সিজেএক্স এটিই পেয়েছিল। আমি জেডএসএইচে স্যুইচিং এবং একটি ভিন্ন প্রম্পট ব্যবহার করে শেষ করেছি। জেডএসএইচের একই সমস্যা নেই।
কালেব থম্পসন

1
পূর্ববর্তী উভয় উত্তরই আমার সমস্যার সমাধান করতে পারেনি, এবং কেন এমনটি হয়েছিল তা কোনও ব্যাখ্যা দেননি। দয়া করে চেক করুন কাস্টম বাশ প্রম্পটটি নিজেই ওভাররাইট হচ্ছে , যদি কারও কাছে এই বিন্দুতে অনুসন্ধান থাকে।
D3Hunter

সংশ্লিষ্ট ইস্যু unix.stackexchange.com/questions/105958/...
matthiasbe

উত্তর:


6

কোথাও আপনার প্রম্পট ফুবার। সাধারণত যা ঘটে তা হ'ল আপনার শেলটি তার প্রিন্টযোগ্য অযোগ্য শর্তাদির কোডগুলি আউটপুট করে এবং স্থান গ্রহণের প্রত্যাশা করে। আমি আপনাকে যে সর্বোত্তম পরামর্শ দিতে পারি তা হ'ল নিয়মিতভাবে আপনার প্রম্পটে যোগ করা (বা সরিয়ে নেওয়া) যতক্ষণ না এই আচরণটি এই সমস্যার কারণ হয়ে উঠছে এমন কোডকে আলাদা করতে না থামায়।


37

বর্ণ কোডগুলি বর্গাকার বন্ধনীগুলিতে আবৃত করা দরকার। বন্ধনীগুলি বাশকে অবহিত করে যে সংযুক্ত পাঠ্যটি প্রিন্ট করা উচিত নয়

@ ফ্রেডিটারের উদাহরণের উপর ভিত্তি করে এটি দেখায় যে নতুন লাইনের পরে যে কোনও ফর্ম্যাটিংয়ের ফলে আসল সমস্যাটি আসবে:

export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "

[] এ ফর্ম্যাট কোড মোড়ানো নিশ্চিত করে যে বিরক্তিকর আচরণ কখনই ঘটে না:

export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "

ডকুমেন্টেশন: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html

যেহেতু পিএস 1 ফর্ম্যাটিংয়ের কারণে মানটি এত দীর্ঘ এবং কঠোর হতে পারে আমি ফরম্যাট কোডগুলিকে ভেরিয়েবলগুলিতে রাখি:

BYELLOW='\[\033[01;33m\]'
IBLACK='\[\033[0;90m\]'
PS_CLEAR='\[\033[0m\]'
export PS1="\n${BYELLOW}[\w]${PS_CLEAR}\n${IBLACK}\$ "

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সমস্যা সমাধান করেছেন।
অটকোল্ড

1
এটি লক্ষ করা উচিত (কারণ আমি এটি নোট করতে ব্যর্থ হয়েছি;)), যে ব্যাকস্ল্যাশ এবং বর্গাকার বন্ধনীগুলির জগাখিচিতে, পালানোর ক্রম অনুসরণকারী বর্গাকার বন্ধনীগুলি এড়ানো \033উচিত নয়। কেবল মোড়ানো স্কোয়ার ব্র্যাকেটগুলি এড়িয়ে চলতে হবে।
বেনজাম

এই সমস্ত বিশেষ চরিত্রের সাথে আমার বিভ্রান্তির উপায়, প্রথম গুগল ফলাফল ব্যবহার করে আমি ঠিক কীভাবে চেয়েছিলাম তার একটি ওয়ার্কিং প্রম্পট তৈরি করতে সহায়তা করেছিল: ezprompt.net
ম্যালাক্স

আমি বছরের জন্য আমার প্রম্পট রঙগুলি কাস্টমাইজ করতে চাইছিলাম তবে আমার কাছে সবসময় এই সমস্যাটি আসেনি! আমি কখনই বুঝতে পারি না যে কেন আমি কেবল থামিয়ে দিয়ে সব কিছু সাদা রেখে দিয়েছি ... আমি কেবল একটি নতুন কম্পিউটার স্থাপন করছিলাম এবং অবশেষে এটি আমার উপর প্রকৃতপক্ষে গুগলটিকে একবারের জন্য উত্সাহিত করেছিল ... তাই আমি খুশী হয়েছি! এই দুর্দান্ত পাঠের জন্য আপনাকে ধন্যবাদ।
টাইলার এইচ 4

8

আমার একই সমস্যা ছিল এবং এটি রঙ সংজ্ঞাগুলির সাথে সম্পর্কিত ছিল।

আমার ক্ষেত্রে, আমার কাছে একটি মাল্টি-লাইন প্রম্পট রয়েছে (প্রম্পট দ্বারা প্রদর্শিত পথের দৈর্ঘ্য নির্বিশেষে বর্তমান কমান্ডের জন্য সর্বাধিক স্থান দেয়)।

খারাপ সংস্করণ:

export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "

ভাল সংস্করণ:

export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "

\033[00mরঙ শেষ করে। এটি যদি নতুন লাইন ( \n) এর পরে হয় তবে এটি পটভূমির রঙের সাথে পূর্ববর্তী কমান্ডগুলিকে ওভাররাইট করতে টার্মিনালে যথাযথ পুনরায় আঁকতে বাধা দেয়। এটিকে নতুন লাইনের পিছনে সরানো সমস্যার সমাধান করেছে।

(ম্যাক ওএস 10.8 এ টার্মিনাল ব্যবহার করে)


এটি আমার পক্ষে সমস্যাটি স্থির করেছিল, যদিও বর্তমানে গৃহীত উত্তরগুলি খুব সাধারণ ছিল।
ব্রায়ান

এটিই আরও সুনির্দিষ্ট উত্তর এবং বিজয়ী হওয়া উচিত (এবং এটি আমার সমস্যার সমাধানও ছিল)।
ক্র্যাভেট্রেইন

\nখুব আমার জন্য অভিযুক্ত ব্যক্তি ছিলেন। ধন্যবাদ!
mululse

3

আমি আসলে মনে করি এটি একটি অনুপস্থিত 'নন-প্রিন্টিং অক্ষর' ডিলিমিটারের সাথে করতে হবে। আমার ঠিক একই সমস্যা ছিল, তবে নতুন লাইনের (\ n) এটি ঠিক না করার আগে এটিকে সরানো। পরিবর্তে আমি সঠিকভাবে সমস্ত '["এবং' \] 'দিয়ে মুদ্রিত সমস্ত অক্ষরকে (এখানে রঙিন কমান্ড) ঘিরেছি।

খারাপ (কাজ করে তবে ইতিহাস বর্ণিত সমস্যাটি উপরে বর্ণিত রয়েছে):

PS1="\e[32m\u\e[35m@\e[32m\h \e[33m\w\e[36m\n\$\e[0m"

ভাল ('\ [' এবং '\]' দিয়ে রঙের সমস্ত কমান্ড ঘিরে রয়েছে - ম্যাসড কমান্ডের ইতিহাস দেখায় না):

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

i.e. "\e[...m" --becomes--> "\[\e[...m\]"

এবং যদি আপনি এটি কোনও সিস্টেমে লগইন করার পরে সিকিউরসিআরটি-র মতো কিছুতে রাখছেন তবে অটো-লগইন সিস্টেমটি পাঠানোর জন্য অক্ষরটি নির্ধারণ করার জন্য প্রথম ব্যাকস্ল্যাশ নিজেই গ্রাস করে থাকলে সমস্ত কিছুকে দ্বিগুণভাবে ছাড়তে হবে (সর্বত্র ডাবল ব্যাকস্ল্যাশ লাগাতে হবে) escape :

PS1="\\[\\e[32m\\]\\u\\[\\e[35m\\]@\\[\\e[32m\\]\\h \\[\\e[33m\\]\\w\\[\\e[36m\\]\\n\\$\\[\\e[0m\\]"

i.e. "\..." --becomes--> "\\..."

(এটি অবশ্যই সিকিউরসিআরটিটির ক্ষেত্রে সত্য এবং অন্যের ক্ষেত্রেও সত্য হতে পারে যেমন পিটিটিওয়াই বা টেরাটার্ম - আপনার পক্ষে পরীক্ষার প্রয়োজন required)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.