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

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

AFAICT,无论是 GNU 的手册页grep还是info grep,都没有详细说明其--color=auto含义。

我一定是这个星球上极少数对这个选项的意义不是很明显的人之一。

我推测--color=auto“是某处之间”--color=never--color=always,但这仍然留下太多未指定的内容。

答案1

规则与 相同ls,它可以更好地在 中记录它man ls。引用:


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

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

答案2

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


grep 内部测试,static int color_option或。012

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

现在,当您将 grep 作为 CLI 上的参数移交--color=auto给 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 

相关内容