내 프로그램이 터미널 출력을 컬러로 출력할 수 있는지 확인할 수 있는 방법이 있는지 궁금합니다.
다음과 같은 명령을 실행하십시오.less
그리고 컬러 출력을 사용하는 프로그램의 출력을 보면 다음과 같이 출력이 잘못 나타납니다.
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
답변1
아이디어는 프로그램이 인쇄할 수 없는 경우 출력을 색상화하지 않도록 내 애플리케이션에 알리는 것입니다. 예를 들어 cron 작업을 통해 파일에 출력을 기록하면 색상이 지정된 출력을 기록할 필요가 없지만 수동으로 실행할 때 보고 싶습니다. 출력에 색상이 있음
지원서를 어떤 언어로 작성하시나요?
일반적인 접근 방식은 출력 장치가 tty인지 확인하고, 그렇다면 해당 터미널 유형이 색상을 지원하는지 확인하는 것입니다.
에서는 bash
다음과 같습니다.
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
C에서는 더 많은 타이핑을 해야 하지만 다음을 사용하면 동일한 결과를 얻을 수 있습니다.이사티및 에 나열된 기능입니다 man 3 terminfo
.
답변2
이것으로 충분합니다:
$ tput colors
출력 색상 설명:
맨페이지를 보면 다음과 같은 내용을 알 수 있습니다.
SYNOPSIS
tput [-Ttype] capname [parms ... ]
그리고...
capname
indicates the capability from the terminfo database. When term‐
cap support is compiled in, the termcap name for the capability
is also accepted.
termcap은 colors
terminfo 데이터베이스에 있으므로 요청할 수 있습니다. 종료 상태가 0이면 termcap이 컴파일된 것입니다. 하지만 다음과 같은 것이 있다면:
$ tput unknowntermcap
tput: unknown terminfo capability 'unknowntermcap'
$ echo $?
4
이는 Unknowntermcap이 존재하지 않음을 나타냅니다. 그래서 이거:
$ tput colors
8
$ echo $?
0
귀하의 주문이 정확하다는 것을 보여주십시오.
기타 유용한 방법:
- C에서는 그냥 사용할 수 있습니다이사티TTY인지 확인하세요.
- 어리석은 터미널인지 확인하려면 $TERM 변수처럼 보입니다.
건배
답변3
아이디어는 프로그램이 인쇄할 수 없는 경우 출력을 색상화하지 않도록 내 애플리케이션에 알리는 것입니다. 예를 들어 cron 작업을 통해 파일에 출력을 기록하면 색상이 지정된 출력을 기록할 필요가 없지만 수동으로 실행할 때 보고 싶습니다. 출력에 색상이 있습니다.
이 사용 사례의 경우 일반적으로 프로그램(예: GNU ls 또는 GNU grep with --color=auto
)이 수행하는 작업은 출력이 터미널로 전송될 때 색상을 사용하고 그렇지 않은 경우 색상을 사용하지 않는 것입니다. ANSI 색상 변경 순서를 지원하지 않는 터미널은 드물기 때문에 사용자가 기본 선택을 무시하도록 허용할 수 있습니다. 그럼에도 불구하고 응용 프로그램에 색상을 강제로 켜거나 끌 수 있는 옵션이 있는지 확인하십시오.
쉘 스크립트에서 [ -t 1 ]
표준 출력이 터미널인지 테스트하는 데 사용됩니다.
# option processing has set $color to yes, no or auto
if [ $color = auto ]; then
if [ -t 1 ]; then color=yes; else color=no; fi
fi
C API를 사용하는 프로그램에서 호출됩니다 isatty(1)
.
# option processing has set use_color to 0 for no, 1 for yes or 2 for auto
if (use_color == 2) use_color = isatty(1);
답변4
less
ANSI 이스케이프 를 해석하도록 설정되지 않은 오류가 있기 때문입니다 . 시스템이 터미널이 색상을 처리할 수 있다는 것을 알고 있는지 확인하려면 R
지원 하는 색상 수를 출력합니다 . 색깔. (일부 터미널에서는 터미널 설명으로 대신 사용할 수 있지만 여전히 색상을 지원합니다.)$LESSOPTS
tput colors
-1
xterm
xterm-color