다음을 사용하여 터미널 색상 지원 테스트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
매뉴얼 페이지에는terminfo
및termcap
이름이 나열되어 있습니다(예:setaf
및 )AF
. 두 가지를 연속해서 사용해 볼 수 있습니다.종료 코드함수가 정의되었는지 여부를 알려줍니다.예를 들어, 다음과 같은 방법으로 두 경우 모두를 처리하도록 테스트 함수를 수정할 수 있습니다.
colors_supported() { command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1 }