터미널을 색칠하고 있어요 PS1
.
tput
예를 들어 다음을 사용하여 색상 변수를 설정합니다.
PURPLE=$(tput setaf 125)
질문:
125
다른 색상(예:)의 색상 코드를 어떻게 찾을 수 있나요 ?
어딘가에 컬러 차트 가이드/치트 시트가 있나요?
그게 뭔지 잘 모르겠어요 125
... 16진수 색상을 구해서 사용할 수 있는 숫자로 변환할 수 있는 방법이 있나요 setaf
?
답변1
입력할 수 있는 색상의 수는 로 지정됩니다 tput colors
.
setf
기본 8가지 색상을 보려면(urxvt 터미널 및 xterm 터미널에 사용됨 setaf
):
$ 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}
1,600만 색상에는 상당한 양의 코드가 필요합니다(일부 콘솔에서는 이를 표시할 수 없음).
기본 사항은 다음과 같습니다.
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
왼쪽에서 오른쪽으로 색상의 변화가 거의 없는 빨간색 선으로 나타납니다. 이 작은 변화가 눈에 보인다면 콘솔은 1,600만 가지 색상을 표시할 수 있습니다.
RGB(빨간색, 녹색, 파란색)의 경우 각각 r
, g
및 b
는 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
16진수 색상 값을 (가장 가까운) 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
답변2
이것tput
유용256색 조회 테이블을 사용하여 인쇄8비트 ANSI 이스케이프 시퀀스(와로 시작 Esc) [
활용터미널 기능이므로 이러한 제어 시퀀스는 색상으로 해석될 수 있습니다. 이는 그래픽 카드에 일반적으로 사용되는 사전 정의된 256가지 색상입니다.
터미널에서 256가지 색상을 모두 인쇄하려면 다음 줄을 시도해 보십시오.
for c in {0..255}; do tput setaf $c; tput setaf $c | cat -v; echo =$c; done
팁: | column
열 목록에 추가하세요.
이 256색 조회 테이블은 다음에서도 찾을 수 있습니다.위키피디아 페이지다음과 같이:
답변3
간단히 말해서, 웹에서 색상 차트를 찾아 색상 번호와 일치시킬 수 있습니다.
긴 대답은 올바른 매핑이 터미널에 따라 다르다는 것입니다.
이는 125
터미널 설명에 참조된 이스케이프 시퀀스에 대한 매개변수입니다. 이 숫자는 특별한 의미가 없습니다. 이는 실제로 특정 터미널 에뮬레이터에 따라 다릅니다.setaf
tput
얼마 전 ANSI는 두 가지 번호 체계를 사용하여 8가지 색상 코드를 정의했습니다. 일부 터미널 설명에서는 이 두 개가 쌍 setf/setb
또는 으로 처리됩니다 setaf/setab
. 후자가 "ANSI 색상"이라는 의미를 갖기 때문에 더 자주 사용되는 것을 볼 수 있습니다. 전자(setf/setb)는 ncurses FAQ에 설명된 대로 빨간색/파란색 순서를 전환합니다.왜 빨간색/파란색으로 바뀌었나요?, 그러나 두 경우 모두 색상 번호 매기기 체계가 설정됩니다. 이러한 숫자와 RGB 콘텐츠 사이에는 미리 정의된 관계가 없습니다.
특정 터미널 에뮬레이터에 대해 미리 정의된 팔레트가 있으며 쉽게 열거할 수 있고 이러한 이스케이프 시퀀스를 프로그래밍 방식으로 사용할 수 있습니다. 가지다아니요관련 표준에 대해서는 xterm FAQ에 설명된 대로 터미널 에뮬레이터 간의 차이점을 확인할 수 있습니다.나는 그 파란색을 좋아하지 않는다.
그러나 규칙은 표준과 혼동되는 경우가 많습니다. 지난 20년 동안 xterm을 개발하면서 ANSI(8) 색상을 통합하고 aixterm
기능(16) 색상을 조정했으며 88색 및 256색 확장을 추가했습니다. 대부분은 다른 개발자가 다른 터미널 에뮬레이터에서 사용했습니다. 이는 xterm FAQ에 요약되어 있습니다."xterm"을 "xterm-256color"와 동일하게 만드는 것은 어떨까요?.
xterm 소스 코드에는 예를 들어 tput
사용될 동일한 이스케이프 시퀀스를 사용하여 색상을 보여주기 위한 스크립트가 포함되어 있습니다.
다음 질문/답변도 도움이 될 수 있습니다.Ansi 확장 색상 지수(17-255)의 색상에 대한 RGB 값
답변4
zsh를 사용하여 xterm
터미널과 유사한( xterm
그리고 최소한 ...과 같은 터미널 기반) 다음을 수행할 수 있습니다 vte
.gnome-terminal
xfce4-terminal
$ read -s -t1 -d $'\a' $'c?\e]4;125;?\a' && echo "${c##*;}"
rgb:afaf/0000/5f5f
배쉬에 해당:
read -s -t1 -d $'\a' -p $'\e]4;125;?\a' c && echo "${c##*;}"
(이스케이프 시퀀스 쿼리에서 색상을 보내길 원합니다.뒤쪽에터미널 규칙은 echo
비활성화됩니다(사용됨 -s
). 그렇지 않으면 응답이 라인 규칙에 따라 절반의 시간으로 표시되므로 read
프롬프트의 일부로 전송됩니다( var?prompt
zsh에서는 ksh와 마찬가지로 -p prompt
bash에서).
색상 125의 정의를 얻습니다(여기서 RGB 사양으로, 각 숫자는 빨간색, 녹색 및 파란색 구성 요소의 강도이며 0과 FFFF 사이의 16진수 숫자로 표시됩니다).
다음을 사용하여 처음 16개 색상에 대해 동일한 작업을 수행할 수 있습니다 xtermcontrol
.
$ xtermcontrol --get-color1
rgb:cdcd/0000/0000