unix[-like] 程序是否能够确定其输出的去向?

nof*_*fle 6 colors terminal io-redirection stdout stdin

直到最近,我的印象是 Unix-y 程序不知道它们的输出去哪里了,无论是标准输出,重定向到文件,还是进入管道。但是,本网站上一个不相关的 U&L 问题引起了我的注意以下示例:

% echo "hello world" > file

% grep --color=auto lo file
hello world

% grep --color=auto lo file | cat
hello world
Run Code Online (Sandbox Code Playgroud)

显然你在这里看不到它,但第一个命令显示“lo”突出显示,正如预期的那样。但是,通过管道的第二个调用没有显示颜色。这表明它grep意识到其输出被定向到管道并避免输出颜色。这是怎么做的?

小智 11

可以确定文件描述符是否引用 tty。

检查出isatty功能

或者,您可以使用fstat函数为您提供有关文件的大量信息。