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
或。0
1
2
0
切勿使用彩色输出1
总是使用颜色2
仅在打印到终端时使用颜色
现在,当您将 grep 作为 CLI 上的参数移交--color=auto
给 grep 时,它会在内部将变量设置color_option
为2
.
如果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