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에 붙여넣기)도 깔끔하게 만들어 드릴게요.

Categories:

Updated: