将 gcc 管道传输到更少以在终端上正确显示颜色

ein*_*lum 10 less colors terminal error-handling

我正在用 gcc 编译一个文件(实际上我正在制作,但没关系),它会向 stderr 发送一些彩色错误消息。所以,我这样做:

gcc a.c 2>&1 | less
Run Code Online (Sandbox Code Playgroud)

但我得到的是如下几行:

a.c: In function <E2><80><98>whatever(int)<E2><80><99>:
a.c:11:10: warning: etc etc
Run Code Online (Sandbox Code Playgroud)

也就是说,我看到的是数字转义码而不是颜色。

我试图遵循这个关于 SU 的答案中的建议,但它对我不起作用。或者更确切地说,ls --color | less有效,但不是我上面的 gcc 命令。我该怎么办?

笔记:

  • 我通过 SSH 连接到这台机器, TERM=xterm-256color
  • 没有管道通过less,我确实得到了终端上的颜色。

Sat*_*ura 17

根据要求发布作为答案。

这里有两个问题:

  • 默认情况下,gcc仅当输出为终端时才打印颜色代码。
  • 默认情况下less,不向终端发送原始颜色字符。

您可以gcc通过将选项传递给它来强制打印颜色代码-fdiagnostics-color=always。请注意,这会破坏依赖解析编译器错误的各种工具。

您可以less通过将选项-r或-R. 后者更安全,因为它只允许实际 ANSI 颜色的代码。

总结一下:

gcc -fdiagnostics-color=always a.c 2>&1 | less -R
Run Code Online (Sandbox Code Playgroud)