我以前经历过类似的行为,但直到现在我才能重现它:命令的输出影响下一个命令提示符后的文本,准备好Enter由用户编辑。
举个例子:
cat /usr/share/terminfo/a/ansi
其效果如下:
或者,复制并粘贴:
1%dP1%dM1%dB1%d@1%dS1%dL1%dD1%dC1%dT1%dA%p1%c2%{1}%-%db%p1%dd
1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m +%d;%dR;0123456789]c1%dm1%dmAX[user@untrusted ~]$ R65;1;9c
如您所见,R65;1;9c
出现在命令提示符之后,按下Enter将其评估为命令。
我确实记得文本不仅出现在命令行之后,而且还再次执行的情况,可能是因为它包含换行符。
这可以被认为是错误还是这是预期的行为,某种不可打印字符的组合允许在下一个命令提示符之后写入?
答案1
您看到的是终端的属性字符串。终端可能会对这些命令中的一个或多个做出不同的响应。
重现它们的快速方法:
$ echo -e '\033[c'
就我而言,在Gnome terminal
这里面类型 65;1;9c
, 在xterm
里面类型 64;1;2;6;9;15;18;21;22c
在控制台中,按 Ctrl-Alt-F1 后,我得到6c
.
这些字符串是由终端创建的,因此您不能使用它们来“插入”任意文本。
这一页告诉您更多关于它们的含义:
CSI Ps c Send Device Attributes (Primary DA).
Ps = 0 or omitted -> request attributes from terminal. The
response depends on the decTerminalID resource setting.
-> CSI ? 1 ; 2 c ("VT100 with Advanced Video Option")
-> CSI ? 1 ; 0 c ("VT101 with No Options")
-> CSI ? 6 c ("VT102")
-> CSI ? 6 2 ; Psc ("VT220")
-> CSI ? 6 3 ; Psc ("VT320")
-> CSI ? 6 4 ; Psc ("VT420")
The VT100-style response parameters do not mean anything by
themselves. VT220 (and higher) parameters do, telling the
host what features the terminal supports:
Ps = 1 -> 132-columns.
Ps = 2 -> Printer.
Ps = 3 -> ReGIS graphics.
Ps = 4 -> Sixel graphics.
Ps = 6 -> Selective erase.
Ps = 8 -> User-defined keys.
Ps = 9 -> National Replacement Character sets.
Ps = 1 5 -> Technical characters.
Ps = 1 8 -> User windows.
Ps = 2 1 -> Horizontal scrolling.
Ps = 2 2 -> ANSI color, e.g., VT525.
Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).
一些设备还会输出识别信息对于具有以下转义序列的设备(请求终端参数)。
$ echo -e '\033[x'