Alguns comandos que uso exibem cores, mas quando os uso com relógio, as cores desaparecem:
watch -n 1 node file.js
É possível ter as cores de volta de alguma forma?
Alguns comandos que uso exibem cores, mas quando os uso com relógio, as cores desaparecem:
watch -n 1 node file.js
É possível ter as cores de volta de alguma forma?
Respostas:
Algumas versões mais recentes watch
agora oferecem suporte a cores.
Por exemplo watch --color ls -ahl --color
.
watch
com git diff
. FWIW, para chegar a esse trabalho que você tem que passar --color=always
para git diff
(ex watch --color git diff --color=always
.
Não use watch
... Quando você usa o relógio, os programas podem detectar que não estão gravando em um terminal e remover a cor. Você deve usar sinalizadores de programa específicos para manter os códigos de controle lá.
Se você não conhece as bandeiras ou não há, você pode fazer um homem pobre vigiar:
while sleep <time>; do clear; <command>; done
Ele vai piscar um pouco (o relógio funciona com "buffer duplo"), mas para algumas coisas é útil o suficiente.
Você pode ficar tentado a fazer um relógio de pobre com proteção dupla usando
while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done
Mas então você atingirá novamente o recurso "Não estou escrevendo para um terminal".
while sleep <time>; do clear; <command> | tee /tmp/file; done
vez de >
e cat
?
watch
do e não impede que o comando pisque
watch
while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done
- Ele usa apenas shell embutidos para limpar a tela e exibir a saída, sendo, portanto, a alternativa com menos oscilações.
Você pode duplicar a operação básica e simples de watch
em algumas linhas de script de shell.
$ cat cheapwatch
#!/bin/sh
# Not quite your Rolex
while true ; do
clear
printf "[%s] Output of %s:\n" "$(date)" "$*"
# "$@" <- we don't want to do it this way, just this:
${SHELL-/bin/sh} -c "$*"
sleep 1 # genuine Quartz movement
done
$ ./cheapwatch ls --color # no problem
Eventualmente, alguém muito inteligente irá hackear um tr
comando neste script que retira os caracteres de controle e então forçar o usuário a usar --color
para desativar essa lógica. Por enquanto, a pura ingenuidade dessa implementação está mantendo o monstro comedor de cores à distância.
Se você estiver em uma situação em watch
que não tem a --color
opção e não pode atualizar o pacote por qualquer motivo, talvez você possa jogar isso.
SIM
relógio funciona com saída de cores. faz parte do pacote procps (pelo menos no debian) aqui está o relatório de bug para sua pergunta http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 onde eles respondem, que você deve atualizar o procps pacote
por exemplo, com ubuntu 11.04 este pacote funciona http://packages.debian.org/wheezy/procps
tl; dr
atualizar procps
Embora outras respostas resolvam esse problema, a maneira mais fácil de fazer isso é usando a unbuffer
ferramenta. Para usá-lo, basta fazer:
$ watch --color 'unbuffer <your-program>'
Dessa forma, você não precisa procurar por sinalizadores de ativação de sequência de controle de seu programa. A ressalva, entretanto, é que sua versão do relógio deve suportar a --color
bandeira.
Você pode instalar o unbuffer no Debian ou Ubuntu usando sudo apt-get install expect
.
'unbuffer <command>'
- sem dar um comando específico para usar, como isso responde à pergunta?
<command>
o programa específico que deseja executar com cores?
Do manual do relógio:
Os caracteres não imprimíveis são retirados da saída do programa. Use "cat -v" como parte do pipeline de comando se quiser vê-los.
Porém, não tenho certeza de como usá-lo.
watch -c "ls --color|cat -v"
mostra ^[[0m^[[01;34mAgent^[[0m
para a primeira linha.
watch --color ls --color=always .