화면을 지우고 싶지만 가능하다면 가능합니다. 대부분의 터미널에서는 이스케이프 시퀀스를 통해 이를 수행할 수 있습니다 \033[2J\033[H
. 그러나 모든 터미널이 이를 이해하는 것은 아닙니다. 터미널이 이 시퀀스를 이해하는지 어떻게 알 수 있나요?
답변1
이것이 termcap 또는 terminfo 데이터베이스의 목적입니다.
tput clear
clear
이러한 데이터베이스는 이름이 저장된 터미널 또는 터미널 에뮬레이터의 기능에 대한 올바른 이스케이프 시퀀스를 검색합니다 $TERM
.
tput
표준 명령입니다, 그러나 표준은 운 좋게도 여기에 1을 포함하는 극소수의 함수 이름을 제외하고는 함수 이름을 지정하지 않습니다 clear
.
대부분의 시스템에는 clear
동일한 작업을 수행하는 표준 명령이 아니더라도 명령이 있습니다.
셸에는 내장 함수를 tcsh
사용하여 데이터베이스 쿼리를 지원하는 기능이 내장되어 있습니다 . 여기서 해당 함수의 이름은 다음과 같습니다 .termcap
echotc
cl
echotc cl
셸에는 terminfo 도 zsh
있습니다 (둘 다 모듈에 있으며 실행/액세스할 때 자동으로 로드됨).echotc
echoti
zsh/terminfo
echotc
echoti
$terminfo
echoti clear
여기서 $terminfo
연관 배열은 함수를 해당 이스케이프 시퀀스에 매핑하므로(인자가 없는 함수에만 유용함) 다음을 수행할 수도 있습니다.
print -rn -- $terminfo[clear]
대부분의 다른 언어(셸이 아닌 경우)에는 이러한 데이터베이스에 대한 인터페이스가 있습니다(C, Perl 및 Python의 libtinfo 및 더 높은 Term::Cap
수준 의 ncurses 참조 ).Curses
curses
notcurses
바라보다man 5 terminfo
terminfo 데이터베이스에 대한 자세한 정보거기이 데이터베이스의 HTML 소스는 다음에 의해 유지됩니다.@토마스디키(그는 또한 ncurses와 xterm 및 기타 많은 터미널 관련 애플리케이션을 관리합니다.) 댓글에서 그는 다양한 터미널이나 터미널 에뮬레이터에서 지원하는 기능의 역사에 대한 많은 유용한 정보를 제공합니다.
1 로컬 환경에서만 가능하므로 엄밀히 말하면 POSIXly에서는 모든 곳에서 필요할 것이라고 기대하지 않더라도 POSIX
필요합니다 .LC_ALL=POSIX tput clear