当我运行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
。