ANSI 컬러 값을 사용 할 일이 생겨서 컬러 값을 찍어봤다.
출력된 컬러는 터미널에 설정된 파레트 값에 영향을 받아서 출력된 결과임
[0m : 모든 색과 스타일 초기화 [1m : 굵게(bold) / 밝게 [3m : 이탤릭체(italic) [4m : 밑줄(underline) [7m : 반전(글자색/배경색을 거꾸로) [9m : 가로줄 치기 [22m : 굵게(bold) 제거 [23m : 이탤릭체(italic)제거 [24m : 밑줄(underline)제거 [27m : 반전 제거 [29m : 가로줄 제거 [30m : 글자색:검정 [31m : 글자색:빨강 [32m : 글자색:초록 [33m : 글자색:노랑 [34m : 글자색:파랑 [35m : 글자색:마젠트(분홍) [36m : 글자색:시안(청록) [37m : 글자색:백색 [39m : 글자색으로 기본값으로 [40m : 바탕색:흑색 [41m : 바탕색:적색 [42m : 바탕색:녹색 [43m : 바탕색:황색 [44m : 바탕색:청색 [45m : 바탕색:분홍색 [46m : 바탕색:청록색 [47m : 바탕색:흰색 [49m : 바탕색을 기본값으로 |
컬러를 출력하는 스크립트
1 echo “ [0m : 모든 색과 스타일 초기화“ 2 echo -e “\033[01m [01m : 굵게(bold) / 밝게 \033[0m“ 3 echo -e “\033[3m [3m : 이탤릭체(italic) \033[0m“ 4 echo -e “\033[4m [4m : 밑줄(underline) \033[0m“ 5 echo -e “\033[7m [7m : 반전(글자색/배경색을 거꾸로) \033[0m“ 6 echo -e “\033[9m [9m : 가로줄 치기 \033[0m“ 7 echo -e “\033[22m [22m : 굵게(bold) 제거 \033[0m“ 8 echo -e “\033[23m [23m : 이탤릭체(italic)제거 \033[0m“ 9 echo -e “\033[24m [24m : 밑줄(underline)제거 \033[0m“ 10 echo -e “\033[27m [27m : 반전 제거 \033[0m“ 11 echo -e “\033[29m [29m : 가로줄 제거 \033[0m“ 12 echo -e “\033[30m\033[47m [30m : 글자색:검정 \033[0m“ 13 echo -e “\033[31m [31m : 글자색:빨강 \033[0m“ 14 echo -e “\033[32m [32m : 글자색:초록 \033[0m“ 15 echo -e “\033[33m [33m : 글자색:노랑 \033[0m“ 16 echo -e “\033[34m [34m : 글자색:파랑 \033[0m“ 17 echo -e “\033[35m [35m : 글자색:마젠트(분홍) \033[0m“ 18 echo -e “\033[36m [36m : 글자색:시안(청록) \033[0m“ 19 echo -e “\033[37m [37m : 글자색:백색 \033[0m“ 20 echo -e “\033[39m [39m : 글자색으로 기본값으로 \033[0m“ 21 echo -e “\033[40m [40m : 바탕색:흑색 \033[0m“ 22 echo -e “\033[41m [41m : 바탕색:적색 \033[0m“ 23 echo -e “\033[42m [42m : 바탕색:녹색 \033[0m“ 24 echo -e “\033[43m [43m : 바탕색:황색 \033[0m“ 25 echo -e “\033[44m [44m : 바탕색:청색 \033[0m“ 26 echo -e “\033[45m [45m : 바탕색:분홍색 \033[0m“ 27 echo -e “\033[46m [46m : 바탕색:청록색 \033[0m“ 28 echo -e “\033[47m [47m : 바탕색:흰색 \033[0m“ 29 echo -e “\033[49m [49m : 바탕색을 기본값으로 \033[0m“ |
2.1 글자 속성
number 예제 실제 입력하는 코드
0 off = ESC[0mnormalESC[0m
1 bold = ESC[1mboldESC[0m
4 underscore = ESC[4munderscoreESC[0m
5 blink = ESC[5mblinkESC[0m
7 reverse = ESC[7mreverseESC[0m
8 concealed = ESC[8mconcealedESC[0m
Note] si에선 ESC code가 입력되면 ‘*’표시가 나오고,
vi에선 ” ‘^[‘표시가 나옵니다.
위에 보면 끝마다 ESC[0m으로 속성을 off한 것이 보이죠?
글의 속성을 바꿔주었으면, 나중엔 원래대로 되돌려놓으세요.
안그러면, 이후에 보는 글자가 그 속성대로 나오니까요.
2.2 전경색 (Foreground Color)
number 예제 실제 입력한 코드
30 black = ESC[30mblackESC[0m 9%)
31 red = ESC[31mredESC[0m
32 green = ESC[32mgreenESC[0m
33 yellow = ESC[33myellowESC[0m
34 blue = ESC[34mblueESC[0m
35 magenta = ESC[35mmagentaESC[0m
36 cyan = ESC[36mcyanESC[0m
37 white = ESC[37mwhiteESC[0m
2.3. 배경색 (Background Color)
number 예제 실제로 입력한 코드
40 black = ESC[40mblackESC[0m
41 red = ESC[41mredESC[0m
42 green = ESC[42mgreenESC[0m
43 yellow = ESC[43myellowESC[0m
44 blue = ESC[44mblueESC[0m
45 magenta= ESC[45mmagentaESC[0m
46 cyan = ESC[46mcyanESC[0m
47 white = ESC[47mwhiteESC[0m
주의할 점
문자의 속성을 바꾸었으면 언젠가는 한번 정상상태로 되돌려야 합니다.
즉, ESC[4m어쩌구 저쩌구 라고 했으면
나중에 normal attribute로 돌려주어야 합니다, ESC[0m으로요.
그렇지 않으면, setting된 속성이 그대로 남아 계속 영향을 미칩니다.
위에서 밑줄이 ESC[0m하기 전까지 계속되는 것을 볼수 있지요?
3. 커서 이동
화면의 좌측상단의 좌표가 (1, 1)입니다.
ESC[pr;pcH – 좌표 (pr, pc)로 이동할때
ESC[pr;pcf – ”
ESC[pnA – pn줄 만큼 위로
ESC[pnB – pn줄 만큼 아래로
ESC[pcC – pc칸 만큼 오른쪽으로
ESC[pcD – pc칸 만큼 왼쪽으로
ESC[s – 현재의 터미널 정보, 커서위치 저장
ESC[u – 저장된 정보로 세팅, 저장된 위치로 이동
4. 지우기
ESC[2J – 화면 전체 지우기
ESC[1J – 화면처음부터 커서 위치까지 지우기
ESC[2K – 줄 전체지우기
ESC[1K – 줄 처음부터 커서위치까지 지우기
ESC[K – 커서다음부터 줄 끝까지 지우기
5. 그 외
5.1. 잘 안되는기능 (제 터미널만 그럴 수 있습니다.)
글자 두배로 키우는 기능 <— ESC#3, ESC#4
글자 깜빡거리는 기능 <— ESC[5m
5.2. 글자의 속성은 조합이 가능합니다.
예) 조합된 속성
= ESC[4mESC[31mESC[43m조합된 속성ESC[0m
^ ^ ^ ^
| | | |
| | 배경색:노랑 원래대로
| 전경색:빨강
밑줄
= ESC[4;31;43m조합된 속성ESC[0m (이렇게 짧게 줄여 쓸 수 있습니다)
5.3. 그 외에 화면모드 세팅, prompt 세팅, keypad 세팅 등 있으며,
자세한 것은 Flag보드에 Kidssysop님의 “ANSIcode (Texxt)”를 보십시오.
5.4. 애니메이션은 글자의 속성과 커서이동등을 함께 이용합니다.
위에보면 Kidssysop님이 퍼온 aninmation 몇 개와,
어느 한 분과, 제가 끼적거려 놓은 것이 있으므로 코드갈무리로
코드를 보시면 대강 어떻게 하는지 알수 있을 겁니다.
또는 Web Browser로 이 글을 읽어도 제어문자가 다 보일 겁니다.
좀 지저분하게 보이겠죠 🙂
6. 절대 주의사항
앞서 ESC[0m으로 하면 normal attribute가 된다고 하였습니다.
그리고 여기서 서술한 것은 모두 vt100기준입니다.
따라서 vt100 호환 터미널이 아니면 화면이 깨질 수도 있습니다.
다른 사람에게 피해를 줄 수 있는 것입니다.
이러한 피해를 줄일 수 있도록 신경을 써야 합니다.
그럼 그 방법에 대해서 말씀드리겠습니다.
먼저, 제어문자를 사용하기전에 ESC[s 로 터미널 세팅을 저장합니다.
그리고 할 것 다 하고 난 다음에 ESC[u 로 리셋시킵니다.
제 시그너쳐를 예로 들겠습니다. 편의상 ESC 표시는 다 빼겠습니다.
[s[31m _ __[B[7D/ `-‘ ([12C[33miii[2B[3D!!![23D[2A[31m
|[32m ( # [37;45m||||||||||||[0m[34m[***][B[24D[31m\_.-.__(
[2A[26C[36m음악과 함께 [1;4m가통이[0m
[B[40D[1m고정관념은 싫다. 나에겐 나의 방식이.[0m[u
맨 처음에 [s 를 하고 맨 마지막에 [u 를 한 것이 보이죠?
별로 힘도 들지 않습니다.