ag 输出在终端中与通过管道传输到文件时显示不同

ag 输出在终端中与通过管道传输到文件时显示不同

当我运行ag命令来搜索文本文件时,我在命令行上得到如下所示的输出(未显示完整结果):

❯ ag dependency
140317155505.md
27:The Bundler dependencies API ...

140423193022_python_packages.md
61:`distutils` is part of the Python standard ....

输出中有换行符。但是,当我通过管道或重定向到文件时,我得到如下输出:

140317155505.md:27:The Bundler dependencies API...
140423193022_python_packages.md:61:`distutils` is part of the Python standard...

这里有一个额外的冒号而不是换行符。这是如何运作的?我认为它ag只是写入 STDOUT 并且不知道 STDOUT 的实际目标——我认为它无法访问此信息是错误的吗?

答案1

我通过 Google 找到了这里,但没有找到我想要的答案:你可以调用 ag 作为

ag --color --group

强制它使用默认颜色并按文件对结果进行分组,无论输出是否为 tty。

这是实际效果如何

答案2

该程序ag(我不熟悉)可以使用系统调用

stdout_is_tty = isatty(1);

isatty() 函数测试 fd 是否是引用终端的打开文件描述符。

这允许它根据写入位置修改输出。

我也认为我找到了相关的源代码部分

/* If we're not outputting to a terminal. change output to:
* turn off colors
* print filenames on every line
*/
if (!isatty(fileno(stdout))) {
  opts.color = 0;
  group = 0;
....

也可以看看man isatty

相关内容