I\'m writing command line utility for Linux. If the output (stdout) is going to a shell it would be nice to print some escapes to colorize output. But if the output is being
You can use isatty on linux. This function is obviously not standard C, since - for example - on many platforms you can't redirect the output to a file.
In (non-standard) C, you can use isatty(). In perl, it is done with the -t operator:
$ perl -E 'say -t STDOUT' 1 $ perl -E 'say -t STDOUT' | cat $
In the shell you can use test:
$ test -t 1 && echo is a tty is a tty $ (test -t 1 && echo is a tty ) | cat $
Have a look at this code:
int is_redirected(){
if (!isatty(fileno(stdout))){
fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
return 1;
}
return 0;
}
/* ... */
int main(int argc, char **argv){
if (is_redirected()) exit(-1);
/* ... */
}
That function will return 1 if the program is being redirected. Notice in the main(...)
how it is called. If the program was to run and is being redirected to stderr
or to a file the program exits immediately.