Tput को उपलब्ध रंगों की गिनती द्वारा दिया गया है tput colors
।
मूल 8 रंगों को देखने के लिए (जैसा कि setf
urxvt टर्मिनल और setaf
xterm टर्मिनल में उपयोग किया जाता है ):
$ printf '\e[%sm▒' {30..37} 0; echo ### foreground
$ printf '\e[%sm ' {40..47} 0; echo ### background
और आमतौर पर इस नाम के रूप में:
Color #define Value RGB
black COLOR_BLACK 0 0, 0, 0
red COLOR_RED 1 max,0,0
green COLOR_GREEN 2 0,max,0
yellow COLOR_YELLOW 3 max,max,0
blue COLOR_BLUE 4 0,0,max
magenta COLOR_MAGENTA 5 max,0,max
cyan COLOR_CYAN 6 0,max,max
white COLOR_WHITE 7 max,max,max
विस्तारित 256 रंगों को देखने के लिए (जैसा कि setaf
urxvt द्वारा उपयोग किया गया है):
$ printf '\e[48;5;%dm ' {0..255}; printf '\e[0m \n'
यदि आप संख्याएँ चाहते हैं और एक आउटपुट दिया गया है:
#!/bin/bash
color(){
for c; do
printf '\e[48;5;%dm%03d' $c $c
done
printf '\e[0m \n'
}
IFS=$' \t\n'
color {0..15}
for ((i=0;i<6;i++)); do
color $(seq $((i*36+16)) $((i*36+51)))
done
color {232..255}
16 मिलियन रंगों को कोड की काफी आवश्यकता है (कुछ कंसोल यह नहीं दिखा सकते हैं)।
मूल बातें हैं:
fb=3;r=255;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm▒▒▒ ' "$fb" "$r" "$g" "$b"
fb
है front/back
या 3/4
।
इतने सारे रंगों को प्रस्तुत करने के लिए आपकी कंसोल क्षमता का एक सरल परीक्षण है:
for r in {200..255..5}; do fb=4;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm ' "$fb" "$r" "$g" "$b"; done; echo
यह बाएं से दाएं स्वर में बहुत छोटे बदलाव के साथ एक लाल रेखा पेश करेगा। यदि वह छोटा परिवर्तन दिखाई देता है, तो आपका कंसोल 16 मिलियन रंगों में सक्षम है।
प्रत्येक r
, g
और b
RGB (लाल, हरा, नीला) के लिए 0 से 255 तक का मूल्य है।
यदि आपका कंसोल प्रकार इसका समर्थन करता है, तो यह कोड एक रंग तालिका बनाएगा:
mode2header(){
#### For 16 Million colors use \e[0;38;2;R;G;Bm each RGB is {0..255}
printf '\e[mR\n' # reset the colors.
printf '\n\e[m%59s\n' "Some samples of colors for r;g;b. Each one may be 000..255"
printf '\e[m%59s\n' "for the ansi option: \e[0;38;2;r;g;bm or \e[0;48;2;r;g;bm :"
}
mode2colors(){
# foreground or background (only 3 or 4 are accepted)
local fb="$1"
[[ $fb != 3 ]] && fb=4
local samples=(0 63 127 191 255)
for r in "${samples[@]}"; do
for g in "${samples[@]}"; do
for b in "${samples[@]}"; do
printf '\e[0;%s8;2;%s;%s;%sm%03d;%03d;%03d ' "$fb" "$r" "$g" "$b" "$r" "$g" "$b"
done; printf '\e[m\n'
done; printf '\e[m'
done; printf '\e[mReset\n'
}
mode2header
mode2colors 3
mode2colors 4
एक हेक्स रंग मान को परिवर्तित करने के लिए (निकटतम) 0-255 रंग सूचकांक:
fromhex(){
hex=${1#"#"}
r=$(printf '0x%0.2s' "$hex")
g=$(printf '0x%0.2s' ${hex#??})
b=$(printf '0x%0.2s' ${hex#????})
printf '%03d' "$(( (r<75?0:(r-35)/40)*6*6 +
(g<75?0:(g-35)/40)*6 +
(b<75?0:(b-35)/40) + 16 ))"
}
इसे इस रूप में उपयोग करें:
$ fromhex 00fc7b
048
$ fromhex #00fc7b
048
HTML रंग प्रारूप में उपयोग किए गए रंग नंबर को खोजने के लिए :
#!/bin/dash
tohex(){
dec=$(($1%256)) ### input must be a number in range 0-255.
if [ "$dec" -lt "16" ]; then
bas=$(( dec%16 ))
mul=128
[ "$bas" -eq "7" ] && mul=192
[ "$bas" -eq "8" ] && bas=7
[ "$bas" -gt "8" ] && mul=255
a="$(( (bas&1) *mul ))"
b="$(( ((bas&2)>>1)*mul ))"
c="$(( ((bas&4)>>2)*mul ))"
printf 'dec= %3s basic= #%02x%02x%02x\n' "$dec" "$a" "$b" "$c"
elif [ "$dec" -gt 15 ] && [ "$dec" -lt 232 ]; then
b=$(( (dec-16)%6 )); b=$(( b==0?0: b*40 + 55 ))
g=$(( (dec-16)/6%6)); g=$(( g==0?0: g*40 + 55 ))
r=$(( (dec-16)/36 )); r=$(( r==0?0: r*40 + 55 ))
printf 'dec= %3s color= #%02x%02x%02x\n' "$dec" "$r" "$g" "$b"
else
gray=$(( (dec-232)*10+8 ))
printf 'dec= %3s gray= #%02x%02x%02x\n' "$dec" "$gray" "$gray" "$gray"
fi
}
for i in $(seq 0 255); do
tohex ${i}
done
इसका उपयोग करें ("मूल" पहले 16 रंग हैं, "रंग" मुख्य समूह है, "ग्रे" अंतिम ग्रे रंग है):
$ tohex 125 ### A number in range 0-255
dec= 125 color= #af005f
$ tohex 6
dec= 6 basic= #008080
$ tohex 235
dec= 235 gray= #262626