Bash

shell 輸出如何影響命令提示符後鍵入的文本?

  • September 23, 2020

我以前經歷過類似的行為,但現在我可以重現它:在下一個命令提示符之後影響文本的命令的輸出,準備好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'

引用自:https://unix.stackexchange.com/questions/610031