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


14

AFAICT既不是GNU的手册页grep,也不是info grep旨在说明--color=auto含义。

我必须是这个选项的含义尚不明显的地球上极少数人之一。

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

Answers:


14

规则与相同,在中将ls其记录下来做得更好man ls。报价单:

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

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


3
是的,我遇到的主要时间是减少时间。如果使用less -R,则可以突出显示匹配项,但需要指定--color=alwaysgrep使其起作用。
Holloway

10

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


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

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

现在,当您--color=auto在CLI上将grep作为参数传递时,它将在内部将变量设置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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.