2010-03-10 11 views
13

consideran este ejemplo sencillo (que muestra en rojo):

echo -e "\033[31mHello World\033[0m"¿Cómo puedo hacer que el comando watch interprete las secuencias vt100?

Se muestra en el terminal correctamente en rojo. Ahora considere:

watch echo -e "\033[31mHello World\033[0m"

No muestra el color.

Nota: Soy consciente de que es fácil escribir un ciclo que imita el comportamiento básico al borrar y volver a ejecutar. Sin embargo, la operación clara hace que la pantalla parpadee, lo que no sucede bajo observación

EDITAR: Originalmente esta pregunta especificaba secuencias de escape en lugar de secuencias vt100, pero eso no es lo que busco, y se resolvió con comillas simples .

+0

Al utilizar solamente órdenes internas para aclarar y mostrar el contenido, técnicamente no parpadeará. Guarde el contenido en una variable de shell, luego 'clear' la pantalla y' echo' la var: 'mientras duerme

Respuesta

2

Editar:

Más versiones recientes de watch color de apoyo. Usted tendrá que utilizar un nivel adicional de citar a preservar las cotizaciones y se escapa en la situación particular del ejemplo en la cuestión:

watch 'echo -e "\033[31mHello World\033[0m"' 

De man watch:

-c, --color 
      Interpret ANSI color sequences. 

Anteriormente :

De man watch:

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

Pero no se interpretan, así que no creo que haya ninguna manera.

+0

Estoy básicamente convencido de que es imposible. – frankc

+0

Creo que una versión reciente del reloj puede haber agregado compatibilidad con el color, pero no he localizado la documentación. –

+0

¿Por qué no funciona git? ? –

1

Usted puede tratar de un solo citar su comando:

watch 'echo -e "\tHello World"' 

En mi máquina esto me deja con una -e como primer carácter, y con pestañas correctamente hello world. Parece -e es el predeterminado para mi versión de eco. Aún así, se trata de un progreso hacia una correcta pestañas hello world

Lo que pasa es un doble unquoting:
lo reloj ver

echo -e "\033[31mHello World\033[0m" 

lo que el shell llamado por el reloj ver:

echo -e \033[31mHello World\033[0m 

Y entonces la barra invertida entra en juego, incluso cuando se cita, y se convierte en una pesadilla de cita.

+0

En un intento de simplificar las cosas, probablemente he simplificado las cosas. Tiene razón en que esto funciona y le he votado por eso, pero lo que realmente busco es que los códigos vt100 funcionen correctamente, lo que parece ser un problema diferente a solo interpretar las secuencias de escape. Por ejemplo: echo -e "\ 033 [31mHello World \ 033 [0m" no funciona correctamente bajo observación incluso con comillas simples – frankc

12

De man watch de watch 0.3.0 en Ubuntu 11.10:

Por reloj por defecto normalmente no pasará caracteres de escape, sin embargo, si se utiliza la opción -C o -color, y luego ver lo hará interpretar secuencias de color ANSI para el primer plano.

No parece para trabajar con su cadena literal en mi terminal, pero estos trabajos:

watch --color 'tput setaf 1; echo foo' 
watch --color ls -l --color 
+0

Está en la página de manual para ver 'hombre watch' en mac osx, pero afaik no funciona. –

Cuestiones relacionadas