How To Use Colors With The Unix "Watch" Command?

Published September 24, 2024

Problem: Adding Color to Unix Watch Output

The Unix "watch" command monitors changes in command output over time. However, its default display can be hard to read. Adding color to the output can improve readability and highlight important information, especially for complex or long command results.

Solution: Restoring Colors in Watch Command Output

Using Newer Versions of Watch

Recent versions of watch include color support. To use this feature, add the --color flag to your watch command. For example:

watch --color ls -ahl --color

This command tells watch to keep colors and passes the --color flag to ls, enabling color output for both commands.

Tip: Check Watch Version

To check if your watch version supports color, run:

watch --version

Look for a version number of 3.3.0 or higher, which includes color support.

Forcing Color Output

Sometimes, colors may not appear even with the --color flag. This happens because some programs detect they're not connected to a terminal and switch to monochrome output. To fix this, you can force color output using different methods depending on your operating system.

MacOS Approach

On MacOS, use the CLICOLOR_FORCE environment variable to force color output. Here's an example:

CLICOLOR_FORCE=1 watch --color ls -ahl

This command sets CLICOLOR_FORCE to 1, telling programs to use color output regardless of the terminal type.

Ubuntu Approach

For Ubuntu and many other Linux distributions, add the --color=always flag to commands that support it. For example:

watch --color ls -ahl --color=always

This approach forces ls to use color output, even when it's not connected to a terminal.

Additional Considerations for Color Output

Program-Specific Color Settings

Some programs need extra setup to show colors correctly when used with the watch command. This is because these programs might have their own color settings or detection methods.

For example, the ls command has its own color options. You might need to set the LS_COLORS environment variable or use the --color flag for ls. Here's an example:

watch --color 'ls --color=always -ahl'

In this case, we use the --color=always flag for ls inside the watch command to make sure it always outputs in color.

For other programs, you might need to check their documentation to find out how to force color output. Some common methods include:

  • Using environment variables (like CLICOLOR_FORCE=1 for many programs)
  • Adding specific flags to the command (like --color=always)
  • Changing configuration files for the program

The exact method can vary depending on the program you're using with watch. Always check the program's manual or help pages for the most accurate information on color output settings.

Tip: Troubleshooting Color Output

If you're having trouble getting color output with the watch command, try piping the command through a utility like 'cat' with its color option. For example:

watch --color 'your_command | cat -color=always'

This can sometimes force color output when other methods fail.