GNU grep 的 --color=auto 选项是什么意思?

kjo*_*kjo 18 grep

AFAICT,无论是 GNU 的手册页grep还是info grep,都没有打算说明什么--color=auto意思。

我一定是这个星球上为数不多的人之一,这个选项的意义不是很明显。

我猜测,--color=auto“是某处在中间”--color=never--color=always,但仍有太多的不确定。

Eri*_*ouf 18

规则与 for 相同ls,后者在man ls. 引用:

默认情况下和
--color=never都禁用使用颜色区分文件类型。使用 --color=auto,ls 仅在
标准输出连接到终端时才发出颜色代码。LS_COLORS 环境
变量可以更改设置。使用 dircolors 命令进行设置。

因此,它将使命令仅在输出到终端时添加颜色格式,而不是,例如,当它转到使用管道的程序可能无法很好地处理颜色格式的管道时。

  • 是的,我遇到的主要时间是减少。如果您使用 `less -R`,您可以获得匹配突出显示,但您需要指定 `--color=always` 来 grep 使其工作。 (4认同)

pid*_*idi 10

由于grep是 GNU 程序,因此另一个选择可能是查看源代码。


内部grep的测试static int color_option对于任何一个012

  • 0 从不使用彩色输出
  • 1 总是使用颜色
  • 2 仅在打印到终端时使用颜色

现在,当您--color=auto将 grep 作为 CLI 上的参数移交给它时,它会在内部将变量设置color_option2.

如果color_option等于,2 grep则进一步测试是否STDOUT链接到终端或用户通过 禁用彩色输出shell environment variables。如果前一个是真实的并且允许彩色输出,grep则继续评估应该使用哪些颜色,最后最终打印出您CLI的颜色。


来源:(grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
Run Code Online (Sandbox Code Playgroud)