linuxunixshellterminalwatch

How can I make the watch command interpret vt100 sequences?


Consider this simple example (which displays in red):

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

It displays on the terminal correctly in red. Now consider:

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

It does not display the color.

Note: I am aware that it is easy to write a loop that mimics the basic behavior by clearing and rerunning. However, the clear operation causes the screen to flash, which does not happen under watch

Edit: Originally this question specified escape sequences rather than vt100 sequences, but that is not really what I am after, and was solved with single quotes.


Solution

  • Edit:

    More recent versions of watch support color. You will need to use an extra level of quoting to preserve the quotes and escapes in the particular situation of the example in the question:

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

    From man watch:

      -c, --color
              Interpret ANSI color sequences.
    

    Previously:

    From man watch:

    Non-printing characters are stripped from program output. Use "cat -v" as part of the command pipeline if you want to see them.

    But they don't get interpreted, so I don't think there's any way.