টার্মিনাল প্রম্পটটি সঠিকভাবে মোড়ানো হচ্ছে না


170

আমার একটি সমস্যা আছে যেখানে আমি ব্যাশ টার্মিনালে খুব দীর্ঘ কমান্ড টাইপ করলে আমি সঠিকভাবে যা লিখছি তা রেন্ডার করে না। আমি প্রত্যাশা করব যে আমার যদি নীচের মতো একটি আদেশ থাকে:

username@someserver ~/somepath $ ssh -i /path/to/private/key
myusername@something.someserver.com

কমান্ডটি দুটি লাইনে রেন্ডার করা উচিত। পরিবর্তে এটি প্রায়শই মোড়ানো হবে এবং আমার প্রম্পটের শীর্ষে লেখা শুরু করবে, কিছুটা এরকম:

myreallylongusername@something.somelongserver.comh -i /path/to/private/key

যদি আমি ফিরে যেতে এবং কিছু যুক্তি পরিবর্তন করার সিদ্ধান্ত নিয়ে থাকি তবে কার্সারটি কোথায় প্রদর্শিত হবে তা বলার অপেক্ষা রাখে না, কখনও কখনও প্রম্পটের মাঝখানে, তবে সাধারণত আমি যেখানে টাইপ করি তার উপরে থাকে

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

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]

Ctrll, resetএবং clearসমস্ত তারা যা বলে তা করে তবে আমি যখন কমান্ডটি আবার লিখি বা Upএকই জিনিস ঘটে।

আমি চেক করেছি এবং checkwinsizeব্যাশে সক্ষম হয়েছি । এটি 80x24 এবং অন্যান্য উইন্ডো আকারে ঘটে।

এটি কি এমন কিছু যা আমি বেঁচে থাকতে শিখি? কিছু জাদু আছে যা আমার জানা উচিত? আমি কেবলমাত্র একটি সংক্ষিপ্ত প্রম্পট ব্যবহারের জন্য স্থির করেছি, তবে এটি সমস্যার সমাধান করে না।


1
সুতরাং কমান্ড ব্যবহার এটি env -i bash --norcঠিক করে দেয়। $ COLUMNS এবং $ লাইন ম্যাচ। তার মানে কি আমার .bashrc এর সাথে মজার কিছু আছে?
মারিকুলা

সুতরাং আমি আমার .bashrc মন্তব্য করেছিলাম এবং আমার প্রম্পটটিকে সমস্যাযুক্ত অংশ হিসাবে আলাদা করে আছি, বিশেষত রঙিন বাক্য গঠন জড়িত। উপরের পিএস 1 এর সাথে কী সমস্যা?
মারিকুলা

1
\[\033[01;32m\]\u: \[\033[01;34m\]\W \[\033[01;34m\] \$ \[\033[0m\]আচরণে অদ্ভুততা এড়ানো বলে মনে হচ্ছে - তবে এটি আপনার মূল

1
অনুযায়ী serverfault উপর এই উত্তরটি ব্যবহারtput smam
Samveen

উত্তর:


188

মুদ্রণযোগ্য সিকোয়েন্সগুলিতে এবং আবদ্ধ থাকা\[\] উচিত । আপনার পিএস 1 এর দিকে তাকালে এটির পরে একটি অনিবদ্ধ ক্রম রয়েছে \W। তবে, দ্বিতীয় এন্ট্রিটি অনর্থক পাশাপাশি এটি পূর্ববর্তী বিবৃতি "1; 34" পুনরাবৃত্তি করে ।

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]
                  |_____________|               |_|
                         |                       |
                         +--- Let this apply to this as well.

এটির জন্য রঙিনের উদ্দেশ্য হওয়া উচিত:

\[\033[1;32m\]\u:\[\033[1;34m\] \W \$\[\033[0m\]
                               |_____|
                                  |
                                  +---- Bold blue.

"আসল" এটি রাখাও কাজ করা উচিত:

\[\033[1;32m\]\u:\[\033[1;34m\] \W\[\033[1;34m\] \$\[\033[0m\]
                                  |_|         |_|
                                   |           |
                                   +-----------+-- Enclose in \[ \]

সম্পাদনা:

আচরণের কারণ হ'ল bashবিশ্বাস করুন যে প্রম্পটটি লম্বা হয় তবে এটি আসলে। একটি সাধারণ উদাহরণ হিসাবে, যদি একটি ব্যবহার করে:

PS1="\033[0;34m$"
       1 2345678

প্রম্পটটি 8 টি অক্ষর বলে মনে করা হয় এবং 1 টি নয় such যেমন টার্মিনাল উইন্ডোটি 20 টি কলাম হয়, 12 টি অক্ষর টাইপ করার পরে, এটি 20 বলে মনে হয় এবং এটি প্রায় আবৃত হয়। এটি যদি স্পষ্ট হয় তবে যদি কেউ ব্যাকস্পেস করার চেষ্টা করে বা Ctrl+u। এটি কলাম 9 এ থামে।

তবে এটি সর্বশেষ কলামে না থাকলে এটি নতুন লাইন শুরু করে না, ফলস্বরূপ প্রথম লাইনটি ওভাররাইট করা হয়।

যদি কেউ টাইপ করতে থাকে তবে 32 টি অক্ষরের পরে পরের লাইনে মোড়ানো উচিত।


আপনার যদি - বা অন্য কারও কাছে থাকে তবে মূল ক্রমটি ঠিক কী কারণে লাইনটি নিজেই পুনরাবৃত্তি করেছিল সে সম্পর্কে একটি ব্যাখ্যা থাকলে আমি তা জানতে আগ্রহী হব। আপনি কীভাবে এটি দৃশ্যত দেখিয়েছেন তার জন্য +1 করুন।

1
@ ইলুমিনÉ: উত্সটির দিকে নজর নেই, তবে পর্যবেক্ষণের আচরণের উপর একটি নোট সহ একটি আপডেট যুক্ত করেছেন।
রানিয়াম

আপনি যদি কোনও সমস্যার মুখোমুখি হন তবে আপনি এই ওয়েবসাইটটি একটি নতুন তৈরি করতে ব্যবহার করতে পারেন - bashrcgenerator.com
divinedragon

এটি আশ্চর্যজনক, আপনাকে ধন্যবাদ @ রুনিয়াম - আপনি কীভাবে জানতেন তা ভাগ করে নিতে কি আপত্তি হবে? আমি এই সম্পর্কে কিছু ডকুমেন্টেশন সন্ধান করতে চাই।
nycynik

2
@ সায়েন্সিক: পর্যবেক্ষণ। আমি অনুমান করি যে
এটিতে

83

এটি বেশিরভাগ টার্মিনাল দ্বারা ধরে নেওয়া উইন্ডোর আকারের সাথে করা আপনার আসল উইন্ডোর আকারের মতো নয়। আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি এটি ব্যবহার করে দেখতে পারেন।

$ shopt checkwinsize

না পেলে

checkwinsize    on

তারপরে এটি সক্রিয় করুন

$ shopt -s checkwinsize

তারপরে কেবলমাত্র অন্য কমান্ড চালানোর চেষ্টা করুন (যেমন ls) বা উইন্ডোটিকে একবার পুনরায় আকার দিন, উপরেরটি প্রতিবার আমার জন্য কাজ করে।

বিশেষত রেডহ্যাট সিস্টেমগুলির জন্য, সমস্যাটি প্রায়শই ~/.bashrcকল না করার জন্য ভুল কনফিগার করে থাকে /etc/bashrc। সাধারণত, ব্যাশ লোড ~/.bashrcযা কল করার আশা করা হয় /etc/bashrc, যা ডিফল্টরূপে রয়েছে shopt -s checkwinsize


ওএস এক্সের ক্ষেত্রেও একই সমস্যা ছিল, স্পষ্টতই আপনি যদি আপনার টার্মিনালটি শুরু করতে "লগইন" কল করেন, এটি এমনভাবে বাশ শুরু করে যাতে / ইত্যাদি / বাশার্ক পড়ে, তবে আপনি যদি সরাসরি ব্যাশে কল করেন তবে ~ / .bashrc না ডিফল্ট হিসাবে উত্স জিনিস যাতে আপনি বিজোড় মোড়ানো প্রভাব পেতে। ধন্যবাদ!
রজারডপ্যাক

এটি আমার পক্ষেও কাজ করেছিল। এই নির্দিষ্ট সার্ভারে রঙগুলি চালু ছিল না, সঠিক কল করে /etc/bashrc, অন্য সমস্ত কিছু করা ভাল ছিল ... দেখা যাচ্ছে এটি মোড়ানো সমস্যার কারণ।
ধৌপিন


দেখতে ভাল সমাধান মনে হচ্ছে। তবে এটি আমার ssh অধিবেশনে কাজ করে না। নিশ্চিত কেন। আমি shopt -s checkwinsizessh সেশনে কমান্ডটি চালিয়েছি। তবে জড়ো হওয়া অবিরত রয়েছে।
কিয়াং শো

এটি হ'ল আমার সমস্যাটি ছিল - কোনও ব্যবহারকারী .brcrc / etc / bashrc কল করছে না, এবং তাই গোলমাল করছে।
সোবারিক

9

অন্যান্য উত্তরে উল্লিখিত হিসাবে, মুদ্রণযোগ্য সিকোয়েন্সগুলি যেমন \e[0;30mমোড়ানো উচিত \[...\]

উপরন্তু (এবং কি আমি এখনও উল্লেখ দেখতে পাচ্ছি না) হল মনে হচ্ছে যে \r\nহওয়া উচিত বাহিরে এর \[...\]আপনি একটি বহু-লাইন প্রম্পট আছে। অবশেষে এটি নির্ধারণ করতে আমার কিছু পরীক্ষা এবং ত্রুটি লাগল।


8

আমি একবার কোথাও পড়েছি (আর কোথায় জানি না) ব্যবহার করে \001এবং \002পরিবর্তে \[এবং \]এই সমস্যাটি সমাধান করতে পারে। এটা আমার জন্য।

যাইহোক, PS1 সংজ্ঞায়িত করতে কুশ্রী দেখতে হবে না।

green="\001$(tput setaf 2)\002"
blue="\001$(tput setaf 4)\002"
dim="\001$(tput dim)\002"
reset="\001$(tput sgr0)\002"

PS1="$dim[\t] " # [hh:mm:ss]
PS1+="$green\u@\h" # user@host
PS1+="$blue\w\$$reset " # workingdir$

export PS1
unset green blue dim reset

2
আমার পিএস 1 একটি কমান্ডকে কল করে যা প্রিন্টফ এস্কেপ সিকোয়েন্সগুলি ওপির সমস্যা সৃষ্টি করে। কেবলমাত্র এই সমাধানটি আমার জন্য সমস্যার সমাধান করে।
রিকমিশাম

6

এটি আপনার COLUMNSLINESপরিবেশের পরিবর্তনশীল সেটিংস সহ কোনও সমস্যার মতো মনে হচ্ছে । আপনি যখন উইন্ডোটির আকার পরিবর্তন করেন তারা সাধারণত জিনোম-টার্মিনাল দ্বারা স্বয়ংক্রিয়ভাবে সেট হয়ে থাকে (আমি বিশ্বাস করি) আপনি কমান্ড জারি করে ম্যানুয়ালি সেট করতে বাধ্য করতে পারেন resize

উদাহরণ

যদি আমি আমার জিনোম-টার্মিনালটিকে x৯x১ to আকারে পরিবর্তন করি তবে আমার ভেরিয়েবলগুলি এর মতো প্রদর্শিত হবে:

$ echo $COLUMNS; echo $LINES
79
17

আমি এটির মতো জোর করতে পারি:

$ resize
COLUMNS=79;
LINES=17;
export COLUMNS LINES;

1
আকর্ষণীয়, কিন্তু সাহায্য করে না।
মারিকুলা

1
"স্ক্রিন" কমান্ডটি চালানোর পরে এটি আমার ইস্যুটি ঠিক করেছে যে এটি লাইনগুলি সঠিকভাবে মোড়ানো হয়নি। ধন্যবাদ !!
নিউকিউই

5

মোড়ানো রোধ করতে, আপনি যেমন ব্যবহার করে কলামগুলির সংখ্যা বাড়িয়ে দিতে পারেন

stty columns 120

1
খুব ভাল ধারণা নয়, এটি
বীমকে

3

এছাড়াও একই সমস্যাটি বিস্তৃত ইউনিকোড প্রতীক (যেমন https://stackoverflow.com/a/34812608/1657819 থেকে ) ব্যবহার করে হতে পারে । সমস্যাটি সৃষ্টিকারী স্নিপেট এখানে রয়েছে (মনে রাখবেন $Greenএবং $Redসঠিকভাবে রঙের স্ট্রিংগুলি এড়িয়ে গেছেন):

FancyX='\342\234\227'
Checkmark='\342\234\223'


# Add a bright white exit status for the last command
PS1="$White\$? "
# If it was successful, print a green check mark. Otherwise, print
# a red X.
if [[ $Last_Command == 0 ]]; then
    PS1+="$Green$Checkmark "
else
    PS1+="$Red$FancyX "
fi

বাশ সঠিকভাবে দৈর্ঘ্যটি গণনা করতে পারে না, তাই সহজ প্রশস্ত চিহ্নগুলির তিনটি অংশের মধ্যে 2 টি পালানো সবচেয়ে সহজ উপায়।

FancyX='\[\342\234\]\227'
Checkmark='\[\342\234\]\223'

ইন্দ্রিয় তোলে। আমার অনুমান যা হ'ল বাশ অক্ষর গণনা করে। কারণ এক্সটি একটি চর নেয় তবে এটি 3 হিসাবে লেখা হয়, তারপরে গণনা স্থির করতে তাদের 2 টি সংযুক্ত করা দরকার। @blauhirn উত্তর এও ব্যাখ্যা দিয়ে একটি ফাংশন না কিভাবে \001এবং \002
akostadinov

অবগতির জন্য, এই কিভাবে বুঝবেন কেউ কিভাবে এই বিন্যাসে আউটপুট বহু-বাইট ইউনিকোড অক্ষর হবে: stackoverflow.com/a/602924/520567
akostadinov
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.