我想清除屏幕,但前提是可能。在大多数终端上,这可以通过转义序列来完成\033[2J\033[H
。但并非所有终端都明白这一点。如何知道终端是否理解该序列?
答案1
这就是 termcap 或 terminfo 数据库的用途。
tput clear
将在这些数据库中查找clear
名称存储在 中的终端或终端仿真器的功能的正确转义序列$TERM
。
tput
是一个标准命令,但是标准没有指定功能的名称,除了极少数功能的名称,幸运的是这里恰好包含clear
1。
大多数系统也有一个clear
命令,即使这不是执行相同操作的标准命令。
shell tcsh
内置支持使用termcap
其echotc
内置函数查询数据库,其中相应功能的名称为cl
:
echotc cl
shellzsh
还具有echotc
以及echoti
terminfo (都在模块中,当您运行/或访问zsh/terminfo
时自动加载):echotc
echoti
$terminfo
echoti clear
在那里,$terminfo
关联数组将功能映射到相应的转义序列(仅对不带参数的功能有用),因此您还可以执行以下操作:
print -rn -- $terminfo[clear]
大多数其他语言(如果不是 shell)都会有这些数据库的接口(请参阅 C、perl 和 python 中的 libtinfo 和更高Term::Cap
级别Curses
的curses
ncurses notcurses
...
看man 5 terminfo
有关 terminfo 数据库的详细信息,以及那里该数据库的 HTML 化源由以下人员维护@托马斯迪基(他还维护 ncurses 和 xterm 以及许多其他与终端相关的应用程序),在评论中提供了大量有关各种终端或终端仿真器支持的功能历史的有用信息。
1 虽然仅在本地环境中,所以严格来说,POSIXly,即使我不希望在任何地方都需要它,POSIX
你也需要它。LC_ALL=POSIX tput clear