如何知道终端是否理解'\033[2J\033[H'?

如何知道终端是否理解'\033[2J\033[H'?

我想清除屏幕,但前提是可能。在大多数终端上,这可以通过转义序列来完成\033[2J\033[H。但并非所有终端都明白这一点。如何知道终端是否理解该序列?

答案1

这就是 termcap 或 terminfo 数据库的用途。

tput clear

将在这些数据库中查找clear名称存储在 中的终端或终端仿真器的功能的正确转义序列$TERM

tput是一个标准命令,但是标准没有指定功能的名称,除了极少数功能的名称,幸运的是这里恰好包含clear1。

大多数系统也有一个clear命令,即使这不是执行相同操作的标准命令。

shell tcsh内置支持使用termcapechotc内置函数查询数据库,其中相应功能的名称为cl

echotc cl

shellzsh还具有echotc以及echotiterminfo (都在模块中,当您运行/或访问zsh/terminfo时自动加载):echotcechoti$terminfo

echoti clear

在那里,$terminfo关联数组将功能映射到相应的转义序列(仅对不带参数的功能有用),因此您还可以执行以下操作:

print -rn -- $terminfo[clear]

大多数其他语言(如果不是 shell)都会有这些数据库的接口(请参阅 C、perl 和 python 中的 libtinfo 和更高Term::Cap级别Cursescursesncurses notcurses...

man 5 terminfo有关 terminfo 数据库的详细信息,以及那里该数据库的 HTML 化源由以下人员维护@托马斯迪基(他还维护 ncurses 和 xterm 以及许多其他与终端相关的应用程序),在评论中提供了大量有关各种终端或终端仿真器支持的功能历史的有用信息。


1 虽然仅在本地环境中,所以严格来说,POSIXly,即使我不希望在任何地方都需要它,POSIX你也需要它。LC_ALL=POSIX tput clear

相关内容