终端 - ^[[H^[[2J - 脱字符方括号 H 脱字符方括号 2 J

Nol*_*ias 2 terminal escape-characters

这个命令是什么?我知道,CSI n ; m H用于将光标移动到n行和m列,但是标题中的命令是什么?^[[H^[[2J

Sté*_*las 5

这是^[清除屏幕并将光标至少在类似 xterm 的终端中置于顶部的序列的视觉表示(其中表示 ESC 字符):

\n\n
$ TERM=xterm tput clear | cat -v\n^[[H^[[2J\n
Run Code Online (Sandbox Code Playgroud)\n\n

要了解这些转义序列,请查看.txt附带的ctlseqs.txtxterm文档。在那里,您会发现:

\n\n
\n

ESC [
\n 控制序列引入符(CSI 为 0x9b)。

\n
\n\n

和:

\n\n
\n

CSI Ps;Ps H
\n 光标位置 [行;列](默认 = [1,1])(CUP)。

\n
\n\n

和:

\n\n
\n

CSI Ps J 显示器擦除 (ED)。
\n Ps = 0 -> 删除下方(默认)。
\n Ps = 1 -> 删除上面的内容。
\n Ps = 2 -> 全部删除。
\n Ps = 3 -> 删除已保存的行 (xterm)。

\n
\n\n

(请注意,这^[[2J不会清除已保存的行或备用屏幕)。

\n\n

tput clear(或clear) 在xterm类似终端上的作用与 相同printf \'\\e[H\\e[2J\'。为此,它查询数据库以了解名称存储在环境变量中的终端的功能terminfo的字符序列是什么。如果您将终端条目转储到数据库中clear$TERMxtermterminfoinfocmp xterm,您将在其中看到:

\n\n
$\xc2\xa0infocmp -1 xterm | grep clear\n        clear=\\E[H\\E[2J,\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是了解给定转义序列的另一种方法:

\n\n
$\xc2\xa0infocmp -L -1 | grep J\n        clear_screen=\\E[H\\E[2J,\n        clr_eos=\\E[J,\n
Run Code Online (Sandbox Code Playgroud)\n\n

(此处使用L功能的 ong 名称)。然后,您可以man 5 terminfo对这些功能进行描述。

\n