On 8/15/18 3:06 AM, Phil Sutter wrote: > Add an additional prerequisite to check_enable_color() to make sure > stdout actually points to an open TTY device. Otherwise calls like > > | ip -color a s >/tmp/foo > > will print color escape sequences into that file. > > Signed-off-by: Phil Sutter <p...@nwl.cc> > --- > lib/color.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/lib/color.c b/lib/color.c > index edf96e5c6ecd7..500ba09682697 100644 > --- a/lib/color.c > +++ b/lib/color.c > @@ -3,6 +3,7 @@ > #include <stdarg.h> > #include <stdlib.h> > #include <string.h> > +#include <unistd.h> > #include <sys/socket.h> > #include <sys/types.h> > #include <linux/if.h> > @@ -79,7 +80,7 @@ void enable_color(void) > > int check_enable_color(int color, int json) > { > - if (color && !json) { > + if (color && !json && isatty(fileno(stdout))) { > enable_color(); > return 0; > } >
This also disables color sequence when the output is piped to a pager such as less which with the -R argument can handle it just fine. ie., the user needs to remove the color arg when that output is not wanted.