grep 开关 --color=auto 起什么作用?

grep 开关 --color=auto 起什么作用?

auto作为开关选项, grep 有什么作用--color?grep 何时决定为匹配的字符串着色,何时不着色?

答案1

预期行为

使用 时--color=auto,当(且仅当)输出直接写入终端且该终端能够显示彩色输出时,grep 将突出显示匹配的字符串。

通常,--color=auto这就是你想要的。例如,如果你使用 grep 匹配 URL 并将其通过管道传输到 Wget,Wget 将看到\e[1;31mhttp://...实际的 URL(并因此而阻塞)。

以下命令将产生彩色输出:

echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat

但是,此命令不应该:

echo Super User | grep --color=auto Super | cat

任何与此行为不一致的情况都应被视为错误。

源代码

随着--color=auto最新的用于 Windows 的 Grep版本(2.5.4)——以及它所基于的原始 2.5.4——当且仅当条件满足时才对输出进行着色

isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")

为真,即当且仅当输出被写入终端时,环境变量TERM已定义,并且终端未哑的

这不会在 Windows 下产生所需的行为,因为TERM通常未定义。解决此问题的一个简单方法是TERM=windows在控制面板中设置。

最新版本grep(2.14)通过当且仅当条件满足时对输出进行着色来解决这个问题

isatty(STDOUT_FILENO) && should_colorize()

是正确的,其中should_colorize()对于 POSIX 和 Win32 的定义不同:

对于前者,条件等同于 2.5.4 中的条件;对于后者,TERM不需要设置环境变量(只是不能dumb)。

相关内容