seqüência de escape estranho

2

Eu preciso identificar o que essas seqüências de escape representam. Eu vejo que esta sequência é autogeração no console do meu servidor, mas não tenho certeza qual é a razão para isso.

Sequência de escape: ^ [[[D

Eu verifiquei este gráfico de sequências de escape como referência: link , mas não encontrei nada correspondente.

    
por Pavel 05.01.2014 / 23:23

2 respostas

5

OBSERVAÇÃO: Isso é o que eu entendo, então pode ser um pouco difícil!

Os caracteres ^ [ normalmente significam a própria chave Escape. Isso é um controle ( ^ ) + um colchete aberto ( [).

excerto de caracteres de escape - caractere de escape ASCII

The ASCII "escape" character (octal: 3, hexadecimal: \x1B, or ^[, or, in decimal, 27) is used in many output devices to start a series of characters called a control sequence or escape sequence. Typically, the escape character was sent first in such a sequence to alert the device that the following characters were to be interpreted as a control sequence rather than as plain characters, then one or more characters would follow to specify some detailed action, after which the device would go back to interpreting characters normally. For example, the sequence of ^[, followed by the printable characters [2;10H, would cause a DEC VT102 terminal to move its cursor to the 10th cell of the 2nd line of the screen. This was later developed to ANSI escape codes covered by the ANSI X3.64 standard. The escape character also starts each command sequence in the Hewlett Packard Printer Command Language.

Em sistemas nos quais você está usando UTF-8, esta seqüência de escape é na verdade 2 caracteres, então agora é ^ [ seguido por um adicional [.

excerto de Código de escape ANSI - Elementos de Sequência

There is a single-character CSI (155/0x9B/0233) as well. The ESC+[ two-character sequence is more often used than the single-character alternative, for details see C0 and C1 control codes. Only the two-character sequence is recognized by devices that support just ASCII (7-bit bytes) or devices that support 8-bit bytes but use the 0x80–0x9F control character range for other purposes. On terminals that use UTF-8 encoding, both forms take 2 bytes (CSI in UTF-8 is 0xC2, 0x9B)[discuss] but the ESC+[ sequence is clearer.

Conhecendo as duas informações acima, isso tornaria sua seqüência de escape Esc + [ + D que parece ser uma grande surpresa , o caractere de retrocesso.

trecho de seqüências de escape ANSI

Esc[ValueD     Cursor Backward: Moves the cursor back by the specified 
               number of columns without changing lines. If the cursor is 
               already in the leftmost column, ANSI.SYS ignores this 
               sequence.

Referências

por 06.01.2014 / 00:13
1

Isso soa como uma cópia ruim em um script de perfil de shell.

Como @slm indicou, ' ^[ + [ ' é a sequência de escape usual, mas você está dizendo que tem ' ^[ + [ + [ '. Quando eu olho através dos códigos de escape do meu emulador de terminal, eu não vejo nenhum código que seja ESC seguido de dois colchetes.

Como um ESC é um caractere não imprimível, ele é frequentemente representado em editores de texto como ^[ . Eu estou supondo que alguém estava editando um script de perfil que tinha esse código de escape, e tentei copiar / colar em outro sistema. Mas eles copiaram a representação visual de ESC ( ^[ ) em vez do próprio ESC.
No entanto, isso resultaria em ver apenas ^[[D , não ^[[[D . Para isso, talvez a cópia / colagem tenha sido feita digitando-a, e é um erro de digitação.

Em qualquer caso, para corrigir isso, você precisará encontrar o script de perfil que tem isso e corrigi-lo. Se estiver usando o bash, tente o seguinte:

fgrep -r '[[[' /etc/bashrc /etc/bashrc.d /etc/bash_profile /etc/profile /etc/profile.d ~/.profile ~/.bashrc ~/.bash_profile

Depois de encontrá-lo, é fácil corrigi-lo. No editor vi , apenas apague os caracteres ^[[ e no modo de inserção faça Ctrl + v então ESC . Isso irá inserir um caractere ESC literal.

    
por 06.01.2014 / 18:10