O que significa quando os caracteres aparecem no prompt após uma operação?

4

Compare os dois comandos a seguir:

mysqldump database_name --hex-blob -uuser_name -p | tee database_name_tee.sql
mysqldump database_name --hex-blob -uuser_name -p > database_name_out.sql

Se eu executar o primeiro, na conclusão, vejo o seguinte no meu terminal:

$ 62;c62;c62;c62;c

De onde vem isso? Isso sugere que algo deu errado em algum lugar do processo? Esses caracteres de controle estão sendo emitidos por algum motivo?

U + 0C62 é Telugu Vocalic L, que eu tenho certeza que não faz parte dos meus dados , então eu não acho que isso é Unicode. De qualquer forma, a sequência parece não ser c62 mas 62;c . Este poderia ser um tipo de controle de algum tipo. E o que está causando isso está incluído no arquivo de saída. Se depois eu cat database_name_tee.sql ou database_name_out.sql , vejo novamente essa sequência quando o cat estiver completo.

tail database.sql -n200 não produz esta saída; -n300 produz apenas $ 62;c62;c ; e -n400 produz $ 62;c62;c62;c62;c . Então, o que quer que esteja causando isso é distribuído por todo o arquivo.

Mexendo com head e tail , encontrei um dos culpados: uma única linha que, quando salva em um arquivo separado e impressa com cat , produz $ 62;c62;c . Meu problema é que essa linha única é 1043108 bytes.

(O arquivo SQL gerado é perfeito e funciona sem erros. Não acho que isso tenha algo a ver com o MySQL em si.)

Estou executando o mysqldump inicial em um servidor CentOS e estou vendo os mesmos efeitos de cat no próprio servidor e no meu desktop Ubuntu, então isso parece ser uma coisa geral do Bash.

od -c problem_line produz 65174 linhas de saída , então reduzi para seção menor que demonstra a mesma saída (também disponível como um hexdump simples ).

    
por TRiG 30.03.2016 / 12:58

1 resposta

3

Não há caracteres de escape no octal dump (esses seriam 033 ).

Existem alguns códigos de controle de 8 bits (geralmente não implementados pela maioria dos terminais além do xterm). O octal 232 é hex 0x9a e (referindo-se a XTerm Seqüências de controle :

ESC Z
     Return Terminal ID (DECID is 0x9a).  Obsolete form of CSI c  (DA).

...
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 ? 6 c  ("VT102")

Os caracteres vêm de uma resposta do terminal para o caractere de controle DECID . Os detalhes da resposta dependem do emulador de terminal (que não foi mencionado na pergunta).

    
por 30.03.2016 / 22:41