这个命令是什么?我知道,CSI n ; m H
用于将光标移动到n
行和m
列,但是标题中的命令是什么?^[[H^[[2J
?
答案1
^[
这是清除屏幕并将光标至少在类似 xterm 的终端中置于顶部的序列的视觉表示(其中表示 ESC 字符):
$ TERM=xterm tput clear | cat -v
^[[H^[[2J
要了解这些转义序列,请查看ctlseqs.txt文档随xterm
.在那里,您会发现:
ESC [
控制序列引入器(CSI 为 0x9b)。
和:
CSI Ps; Ps H
光标位置 [行;列](默认 = [1,1])(CUP)。
和:
CSI Ps J 显示器擦除 (ED)。
Ps = 0 -> 擦除下方(默认)。
Ps = 1 -> 删除上面的内容。
Ps = 2 -> 全部删除。
Ps = 3 -> 删除已保存的行 (xterm)。
(请注意,这^[[2J
不会清除已保存的行或备用屏幕)。
tput clear
(或clear
) 在xterm
类似终端上的作用与 相同printf '\e[H\e[2J'
。为此,它查询数据库以了解其名称存储在环境变量中的终端的功能terminfo
的字符序列是什么。如果您使用 转储数据库中的终端条目,您将在其中看到:clear
$TERM
xterm
terminfo
infocmp xterm
$ infocmp -1 xterm | grep clear
clear=\E[H\E[2J,
这是了解给定转义序列的另一种方法:
$ infocmp -L -1 | grep J
clear_screen=\E[H\E[2J,
clr_eos=\E[J,
(此处使用L
功能的 ong 名称)。然后,您可以man 5 terminfo
对这些功能进行描述。
答案2
中的值n
和m
默认为 1 CSIn;mH
,因此^[[H
将光标移动到起始位置。^[[2J
清除屏幕,将光标保留在原来的位置。