আমি এখানে যে তথ্যের সন্ধান পেয়েছি তার উপর ভিত্তি করে ডান বা বামে রঙের সমর্থন সহ ভেরিয়েবলের দৈর্ঘ্যের সামগ্রীকে সামঞ্জস্য করার সময় আমি ডান সারিবদ্ধ করার একটি সহজ সমাধান আবিষ্কার করতে সক্ষম হয়েছি। আপনার সুবিধার জন্য এখানে যুক্ত করা হয়েছে ...
রং উপর নোট: ব্যবহার \033
বিকল্প পক্ষে অব্যাহতি ছাড়া \[\]
সম্পর্কিত, অধিকাংশ সামঞ্জস্যপূর্ণ এবং তজ্জন্য সুপারিশ প্রমাণ করে।
কৌশলটি হ'ল প্রথমে ডান হাতটি লিখতে হবে, তারপরে \r
লাইনের শুরুতে ফিরে যেতে ক্যারিজ রিটার্ন ( ) ব্যবহার করুন এবং তার উপরে বাম দিকের সামগ্রীটি ওভাররাইট করে চালিয়ে যান:
prompt() {
PS1=$(printf "%*s\r%s\n\$ " "$(tput cols)" 'right' 'left')
}
PROMPT_COMMAND=prompt
আমি tput cols
ম্যাক ওএস এক্সে টার্মিনাল / কনসোল প্রস্থটি পুনরুদ্ধার করার জন্য ব্যবহার করছি terminfo
যেহেতু আমার $COLUMNS
ভেরিটি জনবসতিযুক্ত নয় env
তবে আপনি পরিবর্তিত *
মানটি %*s
" ${COLUMNS}
" সরবরাহ করে " " বা তার পরিবর্তে অন্য যে কোনও মান আপনি পছন্দ করতে পারেন।
পরবর্তী উদাহরণে $RANDOM
বিভিন্ন দৈর্ঘ্যের সামগ্রী তৈরি করার জন্য রঙগুলি অন্তর্ভুক্ত করে এবং এতে আপনি কীভাবে পুনরায় ব্যবহারযোগ্য ফাংশনগুলিতে বাস্তবায়নটিকে রিফেক্টর করতে ফাংশনগুলি বের করতে পারেন তা দেখায়।
function prompt_right() {
echo -e "\033[0;36m$(echo ${RANDOM})\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m${RANDOM}\033[0m"
}
function prompt() {
compensate=11
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
যেহেতু printf
স্ট্রিংয়ের দৈর্ঘ্যটি রঙগুলি রেন্ডার করার জন্য প্রয়োজনীয় অক্ষরের পরিমাণের জন্য আমাদের ক্ষতিপূরণ করতে হবে সেই হিসাবে ধরে নিয়েছে, ক্ষতিপূরণ ছাড়াই মুদ্রিত এএনএসআই অক্ষরগুলির কারণে আপনি এটি পর্দার শেষের দিকে সর্বদা সংক্ষিপ্ত দেখতে পাবেন। রঙের জন্য প্রয়োজনীয় অক্ষরগুলি স্থির থাকে এবং আপনি দেখতে পাবেন যে প্রিন্টফ দৈর্ঘ্যের পরিবর্তনটিকেও বিবেচনায় $RANDOM
রাখে, যেমন উদাহরণস্বরূপ ফিরে আসে ', যা কৌশলটিতে আমাদের ডান প্রান্তিককরণকে রাখে।
এই বিশেষ ব্যাশ প্রম্পট পালাবার ক্রম সঙ্গে কেস (অর্থাত। নয় \u
, \w
, \h
, \t
) যদিও, এই শুধুমাত্র 2 দৈর্ঘ্য রেকর্ড করব কারণ ব্যাশ শুধুমাত্র তাদের যখন প্রম্পট প্রদর্শন করা হয় অনুবাদ করবে printf, পরে স্ট্রিং অনুষ্ঠিত হয়েছে। এটি বাম দিকে প্রভাবিত করে না তবে ডানদিকে এড়ানো ভাল।
উত্পন্ন সামগ্রী যদিও ধ্রুবক দৈর্ঘ্যে থেকে যায় তবে কোনও ফলস্বরূপ। সময় \t
বিকল্পের মতো যা সর্বদা 24 সময়ের জন্য একই পরিমাণের অক্ষর (8) সরবরাহ করে। এই ক্ষেত্রে, মুদ্রণের সময় 8 টি অক্ষরের ফলাফল হিসাবে গণনা করা 2 টি অক্ষরের মধ্যে পার্থক্যের জন্য আমাদের কেবলমাত্র ক্ষতিপূরণের ফ্যাক্টর প্রয়োজন।
মনে রাখবেন যে আপনাকে \\\
কিছু পালানোর ক্রম ট্রিপল করতে হবে যা অন্যথায় স্ট্রিংগুলির অর্থ রাখে। নিম্নোক্ত উদাহরণের মতো বর্তমান কার্যকরী ডিরেক্টরি পালানোর \w
কোনও অর্থ নেই অন্যথায় এটি প্রত্যাশার মতো কাজ করে তবে সময় \t
, যার অর্থ একটি ট্যাব অক্ষর, ট্রিপলটি আগে বেরোনোর আগে প্রত্যাশা অনুযায়ী কাজ করে না।
function prompt_right() {
echo -e "\033[0;36m\\\t\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m\w\033[0m"
}
function prompt() {
compensate=5
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
nJoy!