tree (1) cores não interpeladas adequadamente pelo watch (1) mesmo com a opção --color

1

Estou usando uma combinação simples de comandos para "monitorar" um pouco da minha alteração no sistema de arquivos: watch e tree.
Exceto eu quero cores e não consigo entender.

Aqui está o que eu achei que deveria funcionar: watch --color 'tree -C' , que funciona porque me dá algumas cores, mas não da mesma forma que tree -C por si só.

Aqui estão alguns screencaps:
veja a saída - em cores 'tree -C' , com algumas cores aplicando a saída assistir 'árvore -C' , mostrando que a árvore realmente envia todos os códigos de escape
saída da árvore -C , resultado esperado

O culpado também pode estar nas minhas variáveis de env, mas se eu watch 'echo $LS_COLORS' , meu conf estiver lá.

Alguma ideia? :)

    
por Inva 13.09.2018 / 21:49

1 resposta

0

O problema básico é que watch e tree usam informações diferentes para obter as cores:

  • O programa watch interpreta sequências de escape padrão (ECMA-48) para especificar atributos de vídeo. Isso significa 8 cores, além de negrito, piscar, sublinhar, inverter e itálico. Ele usa (n) curses para exibir as informações, fazendo com que o resultado dependa do banco de dados do terminal

  • O programa tree imita o GNU ls , usando a variável de ambiente LS_COLORS . Que usa a variável de ambiente TERM (que amaldiçoa e a maioria dos aplicativos de terminal usa para identificar uma entrada no banco de dados do terminal) para selecionar um conjunto de seqüências de escape personalizadas, que não necessariamente têm relação com as descrições do banco de dados do terminal.

Com algum trabalho, você pode fazer essa correspondência, por exemplo, gerando um LS_COLORS adequado para uma determinada entrada de terminal. Aparentemente ninguém fez isso. E como o conteúdo de LS_COLORS incompleto (abrangendo apenas uma pequena fração de uma descrição de terminal: sem teclas de função, sem movimento de cursor, sem generalidade), não há sentido em gerar uma entrada de terminal de < strong> LS_COLORS .

Se tree usar 256 cores, watch poderá não entender esses códigos (uma alteração recente aborda uma parte desse problema para o processamento top mas não foi adaptado para watch - aguarde um pouco. watch usa (n) curses para gerenciar a tela, o que torna necessário (para watch ) converter códigos de escape em chamadas curses.

Leitura adicional:

por 13.09.2018 / 22:53