আমার PS1 প্রম্পটে আমি কোন রঙের কোডগুলি ব্যবহার করতে পারি?


131

আমি আমার পিএস 1 প্রম্পটে যেমন কয়েকটি রঙ ব্যবহার করেছি

\033]01;31\] # pink
\033]00m\]   # white
\033]01;36\] # bold green
\033]02;36\] # green
\033]01;34\] # blue
\033]01;33\] # bold yellow

আমি যে রঙের কোডগুলি ব্যবহার করতে পারি তার একটি তালিকা কোথায় পাব?

আমি কালারাইজ বাশ কনসোল রঙের দিকে চেয়েছিলাম তবে এটি আসল কোডগুলির একটি তালিকা সম্পর্কে আমার প্রশ্নের উত্তর দেয় না।

আরও বেশি পঠনযোগ্য ফর্মটি থাকলে ভাল লাগবে।

Https://unix.stackexchange.com/a/127800/10043 এও দেখুন


3
নোট করুন যে এখানে ফাইনালটি \]আসলে রঙের ক্রমের অংশ নয়; এটি নির্দিষ্টভাবে অনুরোধ জানাতে একটি উদ্দেশ্য কাজ করে (আমি এই সম্পর্কে আমার উত্তরের শেষে কয়েকটি অনুচ্ছেদ যুক্ত করেছি)। "আরও বেশি পঠনযোগ্য ফর্মটি থাকলে খুব ভাল লাগবে" " -> আপনার নিজের উত্তরে কাটা এন 'পেস্ট এটি করার এক উপায়।
স্বর্ণলোক 17

উত্তর:


173

এগুলি হ'ল এএনএসআই পলায়নের ক্রম ; সেই লিঙ্কটি রঙিন কোডের একটি লেখচিত্রের সাথে সম্পর্কিত তবে সেই উইকিপিডিয়া পৃষ্ঠায় আরও আকর্ষণীয় জিনিস রয়েছে। এগুলির সবগুলিই (যেমন) একটি সাধারণ লিনাক্স কনসোলটিতে কাজ করে না।

এটি ভুল:

\033]00m\] # white

0টার্মিনালটিকে তার ডিফল্টতে পুনরায় সেট করে (যা সম্ভবত সাদা)। সাদা ফোরগ্রাউন্ড জন্য প্রকৃত কোড 37. এছাড়াও হয়, শেষে পালিয়ে বন্ধ যুগল ( \]) রঙ ক্রম অংশ নয় (একটি প্রম্পট সেটিং তাদের উদ্দেশ্য একটি ব্যাখ্যা জন্য নিচে গত কয়েক অনুচ্ছেদ দেখুন)।

নোট করুন যে কয়েকটি জিইউআই টার্মিনাল আপনাকে একটি কাস্টমাইজড রঙের স্কিম নির্দিষ্ট করতে দেয়। এটি আউটপুটকে প্রভাবিত করবে।

এখানে একটি তালিকা রয়েছে যা এখানে 7 টি পূর্বে এবং 7 টি পটভূমির রঙ যুক্ত করেছে যা আমি আগে দেখিনি, তবে তারা কাজ করে বলে মনে হচ্ছে:

# Foreground colors
90   Dark gray  
91   Light red  
92   Light green    
93   Light yellow   
94   Light blue 
95   Light magenta  
96   Light cyan  

# Background colors
100  Dark gray  
101  Light red  
102  Light green    
103  Light yellow   
104  Light blue 
105  Light magenta  
106  Light cyan 

এছাড়াও, আপনার যদি 256 রঙের জিইউআই টার্মিনাল থাকে (আমি মনে করি তাদের বেশিরভাগটি এখন now), আপনি এই চার্ট থেকে রঙ প্রয়োগ করতে পারেন:

xterm 256 রঙের চার্ট

এগুলি নির্বাচনের জন্য এএনএসআই ক্রমটি নীচের বাম কোণে নম্বরটি 38;5;ব্যবহার করে অগ্রভাগ এবং 48;5;পটভূমির জন্য শুরু হয়, তারপরে রঙ নম্বর, উদাহরণস্বরূপ:

echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"

আমাকে ট্যানে হালকা কমলা দেয় (অর্থাত্ রঙের চার্টটি প্রায় আনুমানিক)।

আপনি এই তালিকায় রং দেখতে পারেন 1 তারা আপনার টার্মিন্যালে মোটামুটি সহজে প্রদর্শিত হবে:

#!/bin/bash

color=16;

while [ $color -lt 245 ]; do
    echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
    ((color++));
done  

আউটপুট স্ব-বর্ণনামূলক।

xterm-256colorকিছু শেল কোডের মাধ্যমে আপনি 256 রঙের টার্মিনালে থাকলে কিছু সিস্টেম $ TERM ভেরিয়েবল সেট করে /etc/profile। অন্যদের উপর, এটি ব্যবহারের জন্য আপনার টার্মিনালটি কনফিগার করতে সক্ষম হওয়া উচিত। এটি টিউআই অ্যাপ্লিকেশনগুলিকে 256 টি রঙের রয়েছে তা জানতে দেবে এবং আপনাকে এর মতো কিছু যুক্ত করতে দেবে ~/.bashrc:

if [[ "$TERM" =~ 256color ]]; then
     PS1="MyCrazyPrompt..."
fi

সাবধান হন যে আপনি যখন প্রম্পটে রঙ পালানোর সিকোয়েন্সগুলি ব্যবহার করেন, তখন আপনাকে সেগুলি এইভাবে পালানো ( \উপসর্গযুক্ত) বর্গাকার বন্ধনীগুলিতে আবদ্ধ করা উচিত :

PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"

লক্ষ করুন যে [রঙের ক্রমের অভ্যন্তরের অভ্যন্তরটি এড়ায় না, তবে ঘেরগুলি রয়েছে। পরবর্তীটির উদ্দেশ্যটি শেলের সাথে ইঙ্গিত করা হয় যে বদ্ধ অনুক্রমটি প্রম্পটের অক্ষরের দৈর্ঘ্যের দিকে গণনা করে না। যদি সেই গণনাটি ভুল হয়, আপনি ইতিহাসের পিছনে স্ক্রোল করার সময় অদ্ভুত জিনিসগুলি ঘটবে, উদাহরণস্বরূপ, এটি যদি দীর্ঘ হয় তবে শেষ স্ক্রোলযুক্ত স্ট্রিংয়ের অতিরিক্ত দৈর্ঘ্যটি আপনার প্রম্পটের সাথে সংযুক্ত প্রদর্শিত হবে এবং আপনি এতে ব্যাকস্পেস রাখতে পারবেন না won't এটি (প্রম্পটটি একইভাবে উপেক্ষা করা হবে)।

আরও মনে রাখবেন যে আপনি যদি প্রতিবার প্রম্পটটি ব্যবহার করার সময় চালানো কোনও কমান্ডের আউটপুট অন্তর্ভুক্ত করতে চান (প্রম্পটটি সেট করার পরে কেবল একবারের বিপরীতে), আপনার এটি একক উদ্ধৃতি সহ আক্ষরিক স্ট্রিং হিসাবে সেট করা উচিত, যেমন:

PS1='\[\033[01;32m\]$(date): \[\033[0m\]'

যদিও আপনি বাশের বিশেষ \dবা \D{format}প্রম্পট পলাতক ব্যবহার করে খুশি হন - এটি কোনও দুর্দান্ত উদাহরণ নয় - যা প্রশ্নের বিষয় নয় তবে এর man bashনীচে পাওয়া যাবে PROMPTING। অন্যান্য বিভিন্ন দরকারী পলায়ন রয়েছে যেমন \wবর্তমান ডিরেক্টরি, \uবর্তমান ব্যবহারকারীর জন্য ইত্যাদি etc.


১. এই চার্টের প্রধান অংশ, রঙগুলি 16 - 231 (নোটিশক্রমে তারা নন তা লক্ষ্য করুন) একটি 6 x 6 x 6 আরজিবি রঙ ঘনক। "কালার কিউব" এটিকে বোঝায় যে একটি আরজিবি রঙের স্থানটি তিন মাত্রিক অ্যারে ব্যবহার করে প্রতিনিধিত্ব করা যেতে পারে (লাল জন্য একটি অক্ষ সহ, একটি সবুজ এবং একটি নীল)। ঘনক্ষেত্রের প্রতিটি বর্ণকে 6 x 6 x 6 অ্যারে স্থানাঙ্ক হিসাবে উপস্থাপন করা যেতে পারে এবং চার্টে সূচকটি এইভাবে গণনা করা হয়:

    16 + R * 36 + G * 6 + B

চার্টে সূচক 16 এ কিউবে প্রথম রঙটি কালো (আরজিবি 0, 0, 0)। আপনি শেল স্ক্রিপ্টে এই সূত্রটি ব্যবহার করতে পারেন:

#!/bin/sh                                                         

function RGBcolor {                                               
    echo "16 + $1 * 36 + $2 * 6 + $3" | bc                        
}                                                                 

fg=$(RGBcolor 1 0 2)  # Violet                                            
bg=$(RGBcolor 5 3 0)  # Bright orange.                                            

echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"

1
আমি পরীক্ষার চার্টের সাথে রঙের উপলভ্যতা পরীক্ষা করার জন্য মূল জিজ্ঞাসকের পরামর্শ দিই। এখানে একটি রয়েছে: robmeerman.co.uk/unix/… বা যদি কেউ ইন্টারনেটে পাওয়া শেল স্ক্রিপ্টগুলিতে বিশ্বাস না করে তবে এটি করা খুব সহজ হতে পারে।
আইবিআর

1
@ আইবিআর আকর্ষণীয় পয়েন্ট। কেবল সমস্ত রং দেখাই একটি ড্রপ ডেড সহজ কাজ, সুতরাং এটি করার জন্য আমি উপরে কয়েকটি ল্যাশ ল্যাশ।
স্বর্ণলোক 17

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

1
দয়া করে, echoআক্ষরিক পাঠ্য ব্যতীত অন্য কোনও কিছুর জন্য ব্যবহার করবেন না যা ড্যাশ ( -) দিয়ে শুরু হয় না । এটি অপ্রয়োজনীয়। সব সাধারণ বাস্তবায়নের লঙ্ঘন মান যা কোনো বিকল্প সমর্থিত হবে বলে। সবচেয়ে খারাপ, তারা বেমানান। printfপরিবর্তে আপনার ব্যবহার করা উচিত । (এবং %s
প্রিন্টফের

2
colortest-256এক্সটার্ম প্যালেটটি একটি সুন্দর কমপ্যাক্ট আকারে তালিকাভুক্ত করুন। ( apt-get install colortestযদি নিখোঁজ হয়)
ভলকার সিগেল

38

মনে হচ্ছে তালিকার অন্তত কয়েকটি হ'ল:

txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m'   # Black - Background
bakred='\e[41m'   # Red
bakgrn='\e[42m'   # Green
bakylw='\e[43m'   # Yellow
bakblu='\e[44m'   # Blue
bakpur='\e[45m'   # Purple
bakcyn='\e[46m'   # Cyan
bakwht='\e[47m'   # White
txtrst='\e[0m'    # Text Reset

https://wiki.archlinux.org/index.php/Color_Bash_Prompt এর উপর ভিত্তি করে


2
অবশেষে ব্যবহারযোগ্য স্ট্রিং সরবরাহ করার জন্য আপনাকে ধন্যবাদ।
lbutlr

21

আমি একটি বাশ ফাংশন লিখেছি যা আপনাকে সমস্ত রঙ দেখায়, যদি এটি সাহায্য করে।

function colorgrid( )
{
    iter=16
    while [ $iter -lt 52 ]
    do
        second=$[$iter+36]
        third=$[$second+36]
        four=$[$third+36]
        five=$[$four+36]
        six=$[$five+36]
        seven=$[$six+36]
        if [ $seven -gt 250 ];then seven=$[$seven-251]; fi

        echo -en "\033[38;5;$(echo $iter)m█ "
        printf "%03d" $iter
        echo -en "   \033[38;5;$(echo $second)m█ "
        printf "%03d" $second
        echo -en "   \033[38;5;$(echo $third)m█ "
        printf "%03d" $third
        echo -en "   \033[38;5;$(echo $four)m█ "
        printf "%03d" $four
        echo -en "   \033[38;5;$(echo $five)m█ "
        printf "%03d" $five
        echo -en "   \033[38;5;$(echo $six)m█ "
        printf "%03d" $six
        echo -en "   \033[38;5;$(echo $seven)m█ "
        printf "%03d" $seven

        iter=$[$iter+1]
        printf '\r\n'
    done
}

আপনি এটি একটি .bashrc / .Bash_profile / .Bash_aliases এ ফেলে দিতে পারেন বা এটি একটি স্ক্রিপ্ট হিসাবে সংরক্ষণ করুন এবং সেভাবে চালাতে পারেন। আমি নীচে আমার নামের মতো করে রঙগুলি পরিবর্তন করতে আপনি রঙগুলি ব্যবহার করতে পারেন।

কালারগ্রিড () আউটপুট: কালারগ্রিডের আউটপুট ()

আমি এটি করে আমার .বাশ_প্রফাইলে আমার নাম পরিবর্তন করেছি:

if [ "$USER" = "plasmarob" ]; then
    p="\[\033[01;38;5;52m\]p"
    l="\[\033[01;38;5;124m\]l"
    a="\[\033[01;38;5;196m\]a"
    s="\[\033[01;38;5;202m\]s"
    m="\[\033[01;38;5;208m\]m"
    a2="\[\033[01;38;5;214m\]a"
    r="\[\033[01;38;5;220m\]r"
    o="\[\033[01;38;5;226m\]o"
    b="\[\033[01;38;5;228m\]b"
    local __user_and_host="$p$l$a$s$m$a2$r$o$b"
else
    local __user_and_host="\[\033[01;36m\]\u"
fi   

...

export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "

নোট করুন যে স্ট্রিংয়ের 01 টি উপসর্গ \[\033[01;38;5;214m\]a এটি গা bold় হতে সেট করে।


3
আমি এটি ভাগ করে নেওয়ার কারণে আমি সত্যিই আনন্দিত। কম ঘৃণ্য হওয়ার জন্য বাশার্ক এবং টার্মিনাল সেটআপ ঠিক করার কাজে আজ এসেছি। সবেমাত্র তারিখটিও দেখেছি - আগামীকাল 2 বছর আগের হবে।
প্লাজমারব

12

রঙিন প্রদর্শনের জন্য টাফকা 'সোনারলকস' পোস্টের মতো আরও একটি স্ক্রিপ্ট যা রেফারেন্সের উদ্দেশ্যে সম্ভবত কিছুটা বেশি ব্যবহারিক:

#!/bin/bash

useage() {
  printf "\n\e[1;4mAscii Escape Code Helper Utility\e[m\n\n"
  printf "  \e[1mUseage:\e[m colors.sh [-|-b|-f|-bq|-fq|-?|?] [start] [end] [step]\n\n"
  printf "The values for the first parameter may be one of the following:\n\n"
  printf "  \e[1m-\e[m  Will result in the default output.\n"
  printf "  \e[1m-b\e[m This will display the 8 color version of this chart.\n"
  printf "  \e[1m-f\e[m This will display the 256 color version of this chart using foreground colors.\n"
  printf "  \e[1m-q\e[m This will display the 256 color version of this chart without the extra text.\n"
  printf "  \e[1m-bq\e[m    This will display the 8 color version of this chart without the extra text.\n"
  printf "  \e[1m-fq\e[m    This will display the 256 color version of this chart using foreground colors without the extra text.\n"
  printf "  \e[1m-?|?\e[m   Displays this help screen.\n"
  printf "\nThe remaining parameters are only used if the first parameter is one of: \e[1m-,-f,q,fq\e[m\n\n"
  printf "  \e[1mstart\e[m  The color index to begin display at.\n"
  printf "  \e[1mend\e[m    The color index to stop display at.\n"
  printf "  \e[1mstart\e[m  The number of indexes to increment color by each iteration.\n\n\n"

}
verbose() {
  if [[ "$1" != "-q" && "$1" != "-fq" && "$1" != "-bq" ]]; then
    printf "\nTo control the display style use \e[1m%s\e[m where \e[1m%s\e[m is:\n" '\e[{$value}[:{$value}]m' '{$value}'
    printf "\n  0 Normal \e[1m1 Bold\e[m \e[2m2 Dim\e[m \e[3m3 ???\e[m \e[4m4 Underlined\e[m \e[5m5 Blink\e[m \e[6m6 ???\e[m \e[7m7 Inverted\e[m \e[8m8 Hidden\e[m\n\n"
    printf "If \e[1m%s\e[m is not provided it will reset the display.\n\n" '{$value}'
  fi
}
eight_color() {
    local fgc bgc vals seq0
    if [ "$1" != "-bq" ]; then
        printf "\n\e[1;4m8 Color Escape Value Pallette\e[m\n\n"
        printf "Color escapes are \e[1m%s\e[m\n" '\e[${value};...;${value}m'
        printf "    Values \e[1m30..37\e[m are \e[1mforeground\e[m colors\n"
        printf "    Values \e[1m40..47\e[m are \e[1mbackground\e[m colors\n\n"  
    fi
    for fgc in {30..37}; do
        for bgc in {40..47}; do
            fgc=${fgc#37}
            bgc=${bgc#40}
            vals="${fgc:+$fgc;}${bgc}"
            vals=${vals%%;}
            seq0="${vals:+\e[${vals}m}"
            printf "  %-9s" "${seq0:-(default)}"
            printf " ${seq0}TEXT\e[m"
            printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m"
        done
        printf "\e[0m\n"
    done
}


if [[ "$1" == "-b" ||  "$1" == "-bq" ]]; then
  eight_color "$1"
  verbose "$1"
elif [[ "$1" == "" || "$1" == "-" ||  "$1" == "-f" ||  "$1" == "-q" ||  "$1" == "-fq" ]]; then
  start=${2:-0}
  end=${3:-255}
  step=${4:-1}
  color=$start
  style="48;5;"
  if [[ "$1" == "-f" || "$1" == "-fq" ]]; then
   style="38;5;"
  fi
  perLine=$(( ( $(tput cols) - 2 ) / 9 ));
  if [[ "$1" != "-q" && "$1" != "-fq" ]]; then
    printf "\n\e[1;4m256 Color Escape Value Pallette\e[0m\n\n"
    printf "    \e[1m%s\e[m for \e[1mbackground\e[m colors\n    \e[1m%s\e[m for \e[1mforeground\e[m colors\n\n" '\e[48;5;${value}m' '\e[38;5;${value}m'
  fi
  while [ $color -le $end ]; do
    printf "\e[m \e[${style}${color}m  %3d  \e[m " $color
    ((color+=step))
    if [ $(( ( ( $color - $start ) / $step ) % $perLine )) -eq 0 ]; then
      printf "\n"
    fi
    done
    printf "\e[m\n"
    verbose "$1"
else
  useage
fi

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


1
ওভারকিলের মতো কোনও হত্যা নয় :)
নবীন

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