2012-08-02 4 views
3

안부 - 나는 색상의 #을 결정하려면 터미널 그러나 나는 터미널이 내가 할 수있는에 쓰고 있는지 확인하는 방법을 알아낼 수 없습니다 ... 나는 단순히터미널에서 출력을 포맷하는 기능을 결정합니까?

tput colors 

의 출력을 읽을 표시 할 수 있습니다 밑줄, 역방향 비디오, 깜박임 (yuck!)과 같은 다른 형식 지정 요청을 지원합니다.

tput을 통해 출력을 설정하는 방법을 확인했지만 시도하기 전에 기능이 존재하는지 확인하지는 않습니다.

모든 단말기에 기능이 있다고 가정해야합니까?

+0

터미널 에뮬레이터에서 속성을 지원할지 여부는 알려주지 않으므로 속성에 terminfo 항목 만 존재한다는 점에 유의하십시오. –

답변

3

이 경우 infocmp, 찾고 싶은 기능이 grep이면 사용할 수 있습니다. 결과가 발견되면, 그 기능이 지원됩니다 : 다른 기능의 이름을 얻기 위하여

infocmp | grep bold 
    bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M, 

는 이름의 테이블 레이아웃 the Linux man pages for terminfo, 또는 this one을 확인하십시오.

2

는 쉬운 방법이있을 수 있습니다,하지만 당신은 현재 터미널 (지원되는 모든 단말기 유형의 이름으로 $TERM 교체)에 대한 전체 항목을 볼 수

infocmp $TERM 

을 실행하여 terminfo 데이터베이스를 조회 할 수 있습니다. 주어진 요구에 가장 쉽게 파싱되도록 ​​출력물을 만드는 방법을 알아보기 위해 맨 페이지를 읽는 것이 좋습니다.

1

정의되지 않은 특성이있는 tput 명령을 사용하면 0이 아닌 종료 코드가 반환됩니다. 일반 출력이있는 경우 리디렉션하여 효과가 나타나지 않도록 할 수 있습니다.

for attr in bold rev smul blink sshm 
do 
    if ! tput "$attr" > /dev/null 
    then 
     echo "Attribute $attr is undefined" 
    fi 
done 

그렇지 않으면, 당신 grepinfocmp의 출력 경우, 사용 -1 출력 옵션 속성 한 줄에 하나씩 (즉, 하나).

infocmp -1 | grep smul 
관련 문제