Eu vim aqui para usar watchcom git diff. FWIW, para chegar a esse trabalho que você tem que passar --color=alwayspara git diff(ex watch --color git diff --color=always.
theabraham
31
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".
Talvez use em while sleep <time>; do clear; <command> | tee /tmp/file; donevez de >e cat?
André Leria
mmm Não entendi @ AndréLeria ... | tee irá remover códigos de cores como watchdo e não impede que o comando pisque
teísta
É uma sugestão para o segundo exemplo, que também não me dá cores. Ou talvez eu esteja fazendo algo errado?
André Leria
1
@ AndréLeria O segundo "exemplo" é um exemplo errado (como está dito na última linha). A questão é que, uma vez que você atinge um tubo, você perde os códigos de cores, pois não está escrevendo para um terminal. Ele está lá para mostrar o quão errado é tentar compensar a cintilação devido ao lapso de tempo entre a execução do comando claro e alvo usando um pipe para trabalhar em buffer comowatch
teísta
4
No bash: 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.
Géza Török
18
Você pode duplicar a operação básica e simples de watchem algumas linhas de script de shell.
$ cat cheapwatch
#!/bin/sh# Not quite your Rolexwhile 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 movementdone
$ ./cheapwatch ls --color # no problem
Eventualmente, alguém muito inteligente irá hackear um trcomando neste script que retira os caracteres de controle e então forçar o usuário a usar --colorpara 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 watchque não tem a --coloropção e não pode atualizar o pacote por qualquer motivo, talvez você possa jogar isso.
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
Embora outras respostas resolvam esse problema, a maneira mais fácil de fazer isso é usando a unbufferferramenta. 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 --colorbandeira.
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?
Danoram
@Danoram O que não está claro para você? Você precisa de ajuda para substituir <command>o programa específico que deseja executar com cores?
Avamander
@Avamander Eu teria escrito esse comentário porque a pergunta foi sinalizada. Se você verificar o histórico de edição, verá que o autor atualizou a resposta. Nada está claro. Meu comentário simplesmente não é mais relevante ..
Danoram
1
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.
Isso faz com que os caracteres de controle fiquem visíveis na saída para mim, em vez de causar coloração. Por exemplo, watch -c "ls --color|cat -v"mostra ^[[0m^[[01;34mAgent^[[0mpara a primeira linha.
Respostas:
Algumas versões mais recentes
watch
agora oferecem suporte a cores.Por exemplo
watch --color ls -ahl --color
.Relacionado .
fonte
watch
comgit diff
. FWIW, para chegar a esse trabalho que você tem que passar--color=always
paragit diff
(exwatch --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:
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
Mas então você atingirá novamente o recurso "Não estou escrevendo para um terminal".
fonte
while sleep <time>; do clear; <command> | tee /tmp/file; done
vez de>
ecat
?watch
do e não impede que o comando pisquewatch
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.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.fonte
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
fonte
Embora outras respostas resolvam esse problema, a maneira mais fácil de fazer isso é usando a
unbuffer
ferramenta. Para usá-lo, basta fazer: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
.fonte
'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.
fonte
watch -c "ls --color|cat -v"
mostra^[[0m^[[01;34mAgent^[[0m
para a primeira linha.watch --color ls --color=always .