100% 휴대용 단말기 컬러지원 종합검사

100% 휴대용 단말기 컬러지원 종합검사

다음을 사용하여 터미널 색상 지원 테스트tput

#!/bin/sh
colors_supported()
{
    command -v tput > /dev/null 2>&1 && tput setaf 1 > /dev/null 2>&1
}

tput현재 이 코드를 사용하여 터미널 색상이 지원되는지 확인하고 있습니다 .

문제는 이 코드가 POSIX 방식으로 100% 이식 가능하고 다양한 Unix 기반 시스템에서 사용 가능한가 하는 것입니다. 나는 Linux, *BSD 등에 대해 이야기하고 있습니다.


지금은 모든 곳에서 시도해 볼 수 없기 때문에 묻습니다.


어떤 색상:

tput setaf 1
tput setaf 2
tput setaf 3
tput setaf 4
tput setaf 5
tput setaf 6
tput setaf 7

답변1

긴 이야기 짧게

권장되는 검사는 특정 유형의 Unix 시스템에서는 작동하지 않습니다.

긴 대답

  • POSIX는 이를 다루지 않습니다.tput, 하지만 읽어주세요이식성매뉴얼 페이지의 일부.

  • 대부분의 시스템은 terminfo 이름(예 setaf: )을 사용합니다.

  • 예를 들어 FreeBSD(기본 라이브러리는 ncurses)이지만 다음을 제공합니다.tput이름 만 termcap지원됩니다. FreeBSD매뉴얼 페이지확실하진 않지만 한번 살펴보세요소스 코드, 이는tgetstr( termcap) 대신에tigetstr( terminfo).

  • 이것terminfo매뉴얼 페이지에는 terminfotermcap이름이 나열되어 있습니다(예: setaf및 ) AF. 두 가지를 연속해서 사용해 볼 수 있습니다.종료 코드함수가 정의되었는지 여부를 알려줍니다.

    예를 들어, 다음과 같은 방법으로 두 경우 모두를 처리하도록 테스트 함수를 수정할 수 있습니다.

    colors_supported()
    {
        command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1
    }
    

관련 정보