tcsh 메시지 색 지정
tcsh에서 메시지 출력할 때 color 지정하는 방법 총 정리해줘.
좋아요! tcsh에서 “메시지 출력할 때 색을 지정하는” 방법을 가장 안정적이고 휴대성 있게 정리해드릴게요. (터미널이 색을 지원해야 합니다. 보통 TERM=xterm-256color면 OK)
1) 기본 원리 (ANSI SGR 코드)
-
색/스타일은 ESC[
[] + 코드 +m으로 켭니다. 끝나면ESC[0m로 리셋. -
예: 빨강 글자 →
ESC[31m, 굵게 →ESC[1m, 밑줄 →ESC[4m -
여러 개를 동시에:
ESC[1;31m(굵게+빨강)
자주 쓰는 코드
| 의미 | 코드 | 의미 | 코드 |
|---|---|---|---|
| 리셋 | 0 | 굵게 | 1 |
| 밑줄 | 4 | 반전 | 7 |
| 전경색(기본) | 30~37 | 배경색(기본) | 40~47 |
| 전경색(밝게) | 90~97 | 배경색(밝게) | 100~107 |
- 8색 번호: 30/40=검정, 31/41=빨강, 32/42=초록, 33/43=노랑, 34/44=파랑, 35/45=마젠타, 36/46=시안, 37/47=흰색
2) tcsh에서 출력하는 “실전” 방법 3가지
A. printf 사용 (가장 권장)
tcsh 내장 echo는 백슬래시 해석이 들쭉날쭉합니다. 외부printf 가 가장 이식성이 좋아요.
tcsh
# 빨강으로 "ERROR" 출력
/bin/printf '\033[31m%s\033[0m\n' "ERROR"
# 굵고 노란 경고
/bin/printf '\033[1;33m%s\033[0m\n' "WARNING: Low disk space"
-
\033= ESC -
가독성을 위해 항상 끝에
\033[0m(리셋) 붙이세요.
B. tput 사용 (터미널 능력 DB(terminfo) 기반)
터미널마다 맞는 코드로 변환해 주므로 휴대성 최고 입니다.
tcsh
# 색/리셋 시퀀스를 변수에 담기 (명령치환은 백틱 `)
set c_red = "`tput setaf 1`" # 전경 빨강
set c_green = "`tput setaf 2`"
set c_yel = "`tput setaf 3`"
set c_reset = "`tput sgr0`"
# 출력 (printf 권장)
printf "%s%s%s\n" "$c_red" "ERROR" "$c_reset"
# echo -n로도 가능
echo -n "$c_yel"; echo "building..."; echo -n "$c_reset"
-
setaf N전경색,setab N배경색 (N=0~7) -
리셋은
sgr0
C. /bin/echo -e (권장 X, 환경 의존)
/bin/echo가 -e를 지원하는 환경에서만 동작합니다. 기대치 못 미칠 수 있음.
tcsh
/bin/echo -e "\033[34mblue text\033[0m"
가능하면 A 또는 B를 쓰세요.
3) 256색 & TrueColor(24비트)도 가능
터미널이 지원하면 더 풍부한 색을 쓸 수 있어요.
256색
tcsh
# 전경 256색: 38;5;<n> (n=0~255)
# 배경 256색: 48;5;<n>
/bin/printf '\033[38;5;202m%s\033[0m\n' "Tangerine"
/bin/printf '\033[48;5;24m\033[97m%s\033[0m\n' "White on deep blue bg"
TrueColor(24비트)
tcsh
# 전경: 38;2;R;G;B 배경: 48;2;R;G;B
/bin/printf '\033[38;2;255;105;180m%s\033[0m\n' "Hot Pink"
/bin/printf '\033[48;2;30;30;30m\033[38;2;200;200;200m%s\033[0m\n' "Grey on dark bg"
4) 매번 치기 귀찮다면: alias로 “컬러 echo” 만들기
고정색 단축키
tcsh
# 인자 전체(\!*)를 빨강으로
alias red '/bin/printf "\033[31m%s\033[0m\n" \!*'
alias green '/bin/printf "\033[32m%s\033[0m\n" \!*'
alias yellow '/bin/printf "\033[33m%s\033[0m\n" \!*'
alias blue '/bin/printf "\033[34m%s\033[0m\n" \!*'
alias bold '/bin/printf "\033[1m%s\033[0m\n" \!*'
# 사용 예
red "ERROR: something went wrong"
bold "=== build start ==="
임의 코드 + 메시지(두 인자) → 범용 함수형
tcsh
# 첫 인자: SGR 코드(예: 1;31), 나머지: 메시지
alias cecho '/bin/printf "\033[%sm%s\033[0m\n" \!:1 \!:2*'
# 사용 예
cecho 1;31 "FATAL"
cecho 4;36 "Underlined Cyan"
tput 기반 alias (환경 휴대성 ↑)
tcsh
alias rmsg 'set c="`tput setaf 1`"; set z="`tput sgr0`"; /bin/printf "%s%s%s\n" "$c" \!* "$z"'
rmsg "RED via terminfo"
5) 스크립트 안에서 쓰기 (tcsh shebang)
tcsh
#!/bin/tcsh
set RED = '\033[31m'
set BOLD = '\033[1m'
set RESET = '\033[0m'
# \033 같은 백슬래시는 printf의 %b로 해석시키거나 리터럴로 써야 합니다.
# 가장 간단: 리터럴 시퀀스를 따옴표에 넣고 printf로 출력.
# (tcsh의 echo는 이스케이프 해석이 들쭉날쭉)
printf "%b%s%b\n" "$BOLD$RED" "Building..." "$RESET"
참고: 변수에
\033를 넣었을 때는 printf의%b형식을 쓰면 백슬래시 이스케이프가 해석됩니다. 단순echo는 기대대로 동작하지 않을 수 있습니다.
6) 자주 쓰는 레시피 모음
- 빨강 에러 한 줄:
tcsh /bin/printf '\033[31mERROR:\033[0m %s\n' "file not found" - 성공(초록) + 굵게:
tcsh /bin/printf '\033[1;32m%s\033[0m\n' "OK" - 상태 표시(노랑) → 작업 → 리셋:
tcsh /bin/printf '\033[33m%s\033[0m\n' "building..." - 256색 팔레트 테스트:
tcsh @ i = 0 while ( $i < 256 ) /bin/printf '\033[38;5;%dm%3d ' $i $i @ i++ if ( $i % 16 == 0 ) echo "" end /bin/printf '\033[0m'
7) 프롬프트는 별도 규칙(참고)
메시지 출력과 달리 프롬프트(set prompt)에 색을 넣을 땐 %{ … %} 로 넓이 계산 제외 구간을 감싸야 줄바꿈/커서 어긋남이 없습니다.
tcsh
# 예) 굵은 파랑 사용자명 + 흰색 디렉터리
set prompt = "%{\033[1;34m%}%n%{\033[0m%}:%{\033[97m%}%~%{\033[0m%}%# "
8) 팁 & 함정
-
리셋(
\033[0m)을 꼭 붙이기: 다음 출력에 색이 번지지 않게. -
/bin/printf선호:echo -e는 환경마다 동작 달라 “총정리” 관점에선 비권장. -
터미널 지원 여부 : 24비트 혹은 256색은 터미널 옵션(예: iTerm2, Windows Terminal)과
TERM설정에 좌우됩니다. 일반적으로xterm-256color권장. -
스크립트 이식성 : 너무 특정 터미널에 의존하는 색은 제한적으로.
필요하시면, 원클릭용 컬러 alias 번들(.tcshrc에 붙여넣기)도 깔끔하게 만들어 드릴게요.