터미널이 '\033[2J\033[H''를 이해하는지 어떻게 알 수 있나요?

터미널이 '\033[2J\033[H''를 이해하는지 어떻게 알 수 있나요?

화면을 지우고 싶지만 가능하다면 가능합니다. 대부분의 터미널에서는 이스케이프 시퀀스를 통해 이를 수행할 수 있습니다 \033[2J\033[H. 그러나 모든 터미널이 이를 이해하는 것은 아닙니다. 터미널이 이 시퀀스를 이해하는지 어떻게 알 수 있나요?

답변1

이것이 termcap 또는 terminfo 데이터베이스의 목적입니다.

tput clear

clear이러한 데이터베이스는 이름이 저장된 터미널 또는 터미널 에뮬레이터의 기능에 대한 올바른 이스케이프 시퀀스를 검색합니다 $TERM.

tput표준 명령입니다, 그러나 표준은 운 좋게도 여기에 1을 포함하는 극소수의 함수 이름을 제외하고는 함수 이름을 지정하지 않습니다 clear.

대부분의 시스템에는 clear동일한 작업을 수행하는 표준 명령이 아니더라도 명령이 있습니다.

셸에는 내장 함수를 tcsh사용하여 데이터베이스 쿼리를 지원하는 기능이 내장되어 있습니다 . 여기서 해당 함수의 이름은 다음과 같습니다 .termcapechotccl

echotc cl

셸에는 terminfo 도 zsh있습니다 (둘 다 모듈에 있으며 실행/액세스할 때 자동으로 로드됨).echotcechotizsh/terminfoechotcechoti$terminfo

echoti clear

여기서 $terminfo연관 배열은 함수를 해당 이스케이프 시퀀스에 매핑하므로(인자가 없는 함수에만 유용함) 다음을 수행할 수도 있습니다.

print -rn -- $terminfo[clear]

대부분의 다른 언어(셸이 아닌 경우)에는 이러한 데이터베이스에 대한 인터페이스가 있습니다(C, Perl 및 Python의 libtinfo 및 더 높은 Term::Cap수준 의 ncurses 참조 ).Cursescursesnotcurses

바라보다man 5 terminfoterminfo 데이터베이스에 대한 자세한 정보거기이 데이터베이스의 HTML 소스는 다음에 의해 유지됩니다.@토마스디키(그는 또한 ncurses와 xterm 및 기타 많은 터미널 관련 애플리케이션을 관리합니다.) 댓글에서 그는 다양한 터미널이나 터미널 에뮬레이터에서 지원하는 기능의 역사에 대한 많은 유용한 정보를 제공합니다.


1 로컬 환경에서만 가능하므로 엄밀히 말하면 POSIXly에서는 모든 곳에서 필요할 것이라고 기대하지 않더라도 POSIX필요합니다 .LC_ALL=POSIX tput clear

관련 정보