Por que minha string está mudando neste pipeline?

0

Eu estava tentando canalizar um URL de saída para o comando open , mas encontrei várias instâncias em que, apesar de alterar as configurações de cor do grep ou piping de outras saídas como awk ou cut , eu ainda estava recebendo caracteres especiais na saída. Como mostrado abaixo:

Nasduasprimeirasvezesemqueexecutoocomandoopen,recebodoisdessesdoisURLs,respectivamente:

VocêpodeveroscaracteresespeciaissendoanexadosaosURLs,apesardeseremcanalizadosatravésdecorteoudealterarasconfiguraçõesdecores.Issoéconfirmadocomocomandood:

➜~apmshowvim-mode|grephttps|cut-d''-f2|od-atx10000000esc[4mhttps://gith1b5b346d68747470733a2f2f676974680000020ub.com/atom/vim-75622e636f6d2f61746f6d2f76696d2d0000040modeesc[24mnl6d6f64651b5b32346d0a➜~apmshowvim-mode|grep--color=nonehttps|cut-d''-f2|od-atx10000000esc[4mhttps://gith1b5b346d68747470733a2f2f676974680000020ub.com/atom/vim-75622e636f6d2f61746f6d2f76696d2d0000040modeesc[24mnl6d6f64651b5b32346d0a0000052

AspróximasduassaídastentamusarawkpararemoveraURLdeapm,maselastambémintroduzemcaracteresespeciais,eocomandoopententaentãoabri-loscomoarquivos.Issoéconfirmadocomod:

➜~apmshowvim-mode|awk-F'''/http/{print$2}'|od-atx10000000esc[4mhttps://gith1b5b346d68747470733a2f2f676974680000020ub.com/atom/vim-75622e636f6d2f61746f6d2f76696d2d0000040modeesc[24mnl6d6f64651b5b32346d0a

Asoluçãofoiusarumadorável sed oneliner , sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" que consegue retirar todos os caracteres especiais. O comando final open usa esse oneliner e consegue ir para https://github.com/atom/vim-mode conforme o esperado. Isso é confirmado por od :

➜  ~  apm show vim-mode | awk -F' ' '/http/ {print $2}' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | od -atx1
0000000    h   t   t   p   s   :   /   /   g   i   t   h   u   b   .   c
           68  74  74  70  73  3a  2f  2f  67  69  74  68  75  62  2e  63
0000020    o   m   /   a   t   o   m   /   v   i   m   -   m   o   d   e
           6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d  6d  6f  64  65
0000040   nl
           0a
0000041

Então, isso deixa algumas perguntas:

  1. Por que o grep --color=none não funciona?
  2. Por que meus vários outros utilitários estão tocando em caracteres especiais?

Eu suspeito que tenha algo a ver com minhas configurações de shell. Estou usando o zim com o gitster tema

editar

A configuração

TERM=dumb parece não ter efeito:

➜  github-application master ✓ diff <(TERM=dumb apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜  github-application master ✓
A configuração

NPM_CONFIG_COLOR=false também parece não ter efeito:

➜  ~/w/s/g/m/todo master ✓ diff <(NPM_CONFIG_COLOR=false apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜  ~/w/s/g/m/todo master ✓

Acho que é por causa do sublinhado no URL. Eu tenho explorado isso ainda em outra pergunta

    
por mbigras 29.10.2016 / 07:07

1 resposta

0

Parece que os caracteres especiais estão sendo inseridos por apm .

➜  ~  apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

 ➜  ~  apm show vim-mode | grep --color=none https | cut -d' ' -f2 | od -atx1
 0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
            1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
 0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
            75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
 0000040    m   o   d   e esc   [   2   4   m  nl
            6d  6f  64  65  1b  5b  32  34  6d  0a
 0000052

➜  ~  apm show vim-mode | od -atx1
0000000  esc   [   3   6   m   v   i   m   -   m   o   d   e esc   [   3
           1b  5b  33  36  6d  76  69  6d  2d  6d  6f  64  65  1b  5b  33
0000020    9   m  nl   �  94  9c   �  94  80   �  94  80  sp esc   [   3
           39  6d  0a  e2  94  9c  e2  94  80  e2  94  80  20  1b  5b  33
0000040    3   m   0   .   6   5   .   1 esc   [   3   9   m  nl   �  94
           33  6d  30  2e  36  35  2e  31  1b  5b  33  39  6d  0a  e2  94
0000060   9c   �  94  80   �  94  80  sp esc   [   4   m   h   t   t   p
           9c  e2  94  80  e2  94  80  20  1b  5b  34  6d  68  74  74  70
0000100    s   :   /   /   g   i   t   h   u   b   .   c   o   m   /   a
           73  3a  2f  2f  67  69  74  68  75  62  2e  63  6f  6d  2f  61
0000120    t   o   m   /   v   i   m   -   m   o   d   e esc   [   2   4
           74  6f  6d  2f  76  69  6d  2d  6d  6f  64  65  1b  5b  32  34
0000140    m  nl   �  94  9c   �  94  80   �  94  80  sp   A   d   d  sp
           6d  0a  e2  94  9c  e2  94  80  e2  94  80  20  41  64  64  20
0000160    v   i   m  sp   m   o   d   a   l  sp   c   o   n   t   r   o
           76  69  6d  20  6d  6f  64  61  6c  20  63  6f  6e  74  72  6f
0000200    l  nl   �  94  9c   �  94  80   �  94  80  sp   5   0   3   8
           6c  0a  e2  94  9c  e2  94  80  e2  94  80  20  35  30  33  38
0000220    6   1  sp   d   o   w   n   l   o   a   d   s  nl   �  94  94
           36  31  20  64  6f  77  6e  6c  6f  61  64  73  0a  e2  94  94
0000240    �  94  80   �  94  80  sp   1   0   1   4  sp   s   t   a   r
           e2  94  80  e2  94  80  20  31  30  31  34  20  73  74  61  72
0000260    s  nl  nl   R   u   n  sp   '   a   p   m  sp   i   n   s   t
           73  0a  0a  52  75  6e  20  60  61  70  6d  20  69  6e  73  74
0000300    a   l   l  sp   v   i   m   -   m   o   d   e   '  sp   t   o
           61  6c  6c  20  76  69  6d  2d  6d  6f  64  65  60  20  74  6f
0000320   sp   i   n   s   t   a   l   l  sp   t   h   i   s  sp   p   a
           20  69  6e  73  74  61  6c  6c  20  74  68  69  73  20  70  61
0000340    c   k   a   g   e   .  nl  nl
           63  6b  61  67  65  2e  0a  0a
0000350

com e esc [ 2 4 sendo as linhas de interesse específicas.

Isto é confirmado mudando para bash e obtendo o mesmo resultado:

bash-3.2# apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

Obrigado @muru pela dica!

    
por 29.10.2016 / 20:04

Tags