¿Colores con el comando de Unix "mirar"?

Respuestas:

145

Algunas versiones más recientes de watchahora admiten color.

Por ejemplo watch --color ls -ahl --color.

Relacionados .

Pausado hasta nuevo aviso.
fuente
3
eche un vistazo a: superuser.com/questions/125469/… (primera respuesta) - Tal vez pueda vincularlo en su respuesta.
aatdark
11
Vine aquí para usar watchcon git diff. Fwiw, para conseguir que trabajar usted tiene que pasar en --color=alwaysa git diff(por ejemplo watch --color git diff --color=always.
theabraham
31

No lo use watch... Cuando usa el reloj, los programas pueden detectar que no están escribiendo en un terminal y luego quitar el color. Debe utilizar indicadores de programa específicos para mantener los códigos de control allí.

Si no conoce las banderas o no las hay, puede hacer que un pobre mire de la siguiente manera:

while sleep <time>; do clear; <command>; done

Tendrá un poco de parpadeo (el reloj funciona con "doble búfer") pero para algunas cosas es bastante útil.

Puede tener la tentación de hacer un reloj de hombre pobre con doble amortiguación usando

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done

Pero luego volverá a presionar la función "No estoy escribiendo en una terminal".

teísta
fuente
¿Quizás usar en while sleep <time>; do clear; <command> | tee /tmp/file; donelugar de >y cat?
André Leria
mmm no lo entiendo @ AndréLeria ... | tee eliminará los códigos de color como watchdo y no evitará que el comando parpadee
theist
Es una sugerencia para el segundo ejemplo, que tampoco me da colores. ¿O quizás estoy haciendo algo mal?
André Leria
1
@ AndréLeria El segundo "ejemplo" es un ejemplo equivocado (como se dice en la última línea). El punto es que una vez que golpea una tubería, pierde los códigos de color, ya que no está escribiendo en una terminal. Está ahí para demostrar lo equivocado es para tratar de compensar el parpadeo debido al tiempo transcurrido entre la clara y la ejecución de comandos de destino mediante una tubería a trabajar como tamponadawatch
teísta
4
En bash: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Utiliza solo elementos internos de shell para limpiar la pantalla y mostrar la salida, por lo que es la alternativa que menos parpadea.
Géza Török
18

Puede duplicar la operación básica y sencilla de watchen un par de líneas 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

Con el tiempo, alguien muy inteligente hackeará un trcomando en este script que elimina los caracteres de control y luego obligará al usuario a usarlo --colorpara desactivar esa lógica. Por el momento, la pura ingenuidad de esta implementación mantiene alejado al monstruo devorador de colores.

Si se encuentra en una situación en la watchque no tiene la --coloropción y no puede actualizar el paquete por cualquier motivo, tal vez pueda incluir esto.

Kaz
fuente
8

Si bien otras respuestas resuelven este problema, la forma más fácil de lograrlo es utilizando la unbufferherramienta. Para usarlo simplemente haz lo siguiente:

$ watch --color 'unbuffer <your-program>'

De esta manera, no tiene que buscar la secuencia de control que habilita los indicadores de su programa. Sin embargo, la advertencia es que su versión de reloj debe ser compatible con la --colorbandera.

Puede instalar unbuffer en Debian o Ubuntu usando sudo apt-get install expect.

jajaja
fuente
'unbuffer <command>'- sin dar un comando específico para usar, ¿cómo responde esto a la pregunta?
Danoram
@Danoram ¿Qué no te queda claro? ¿Necesita ayuda para reemplazar <command>el programa específico que desea ejecutar con colores?
Avamander
@Avamander Hubiera escrito ese comentario porque la pregunta estaba marcada. Si revisa el historial de edición, verá que el autor actualizó la respuesta. No hay nada claro. Mi comentario ya no es relevante ..
Danoram
1

Del manual del reloj:

Los caracteres que no se imprimen se eliminan de la salida del programa. Utilice "cat -v" como parte de la canalización de comandos si desea verlos.

Sin embargo, no estoy seguro de cómo usarlo.

Benoit
fuente
5
Esto hace que los caracteres de control sean visibles en la salida para mí, en lugar de causar coloración. Por ejemplo, watch -c "ls --color|cat -v"muestra ^[[0m^[[01;34mAgent^[[0mla primera línea.
Drew Noakes
1
probarwatch --color ls --color=always .
Zhang LongQI