Bash가 색상을 인쇄할 수 있는지 확인하는 방법

Bash가 색상을 인쇄할 수 있는지 확인하는 방법

내 프로그램이 터미널 출력을 컬러로 출력할 수 있는지 확인할 수 있는 방법이 있는지 궁금합니다.

다음과 같은 명령을 실행하십시오.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은 colorsterminfo 데이터베이스에 있으므로 요청할 수 있습니다. 종료 상태가 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

lessANSI 이스케이프 를 해석하도록 설정되지 않은 오류가 있기 때문입니다 . 시스템이 터미널이 색상을 처리할 수 있다는 것을 알고 있는지 확인하려면 R지원 하는 색상 수를 출력합니다 . 색깔. (일부 터미널에서는 터미널 설명으로 대신 사용할 수 있지만 여전히 색상을 지원합니다.)$LESSOPTStput colors-1xtermxterm-color

관련 정보