Bash
shell 輸出如何影響命令提示符後鍵入的文本?
我以前經歷過類似的行為,但現在我可以重現它:在下一個命令提示符之後影響文本的命令的輸出,準備好
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
會將其評估為命令。我確實記得文本不僅出現在命令行之後,而且還被再次執行的情況,可能是因為它包含換行符。
這可以被認為是錯誤還是這是預期的行為,某種不可列印字元的組合允許在下一個命令提示符後寫入?
您看到的是終端的屬性字元串。終端可能對這些命令中的一個或多個做出不同的響應。
重現它們的快速方法:
$ echo -e '\033[c'
在我的情況下,在
Gnome terminal
這個types 裡面,65;1;9c
裡面type和在控制台中,按下 Ctrl-Alt-F1 我得到.xterm
64;1;2;6;9;15;18;21;22c``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'