让 gcc 通过管道传输到 less 以在终端上正确显示颜色

让 gcc 通过管道传输到 less 以在终端上正确显示颜色

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

gcc a.c 2>&1 | less

但我得到的是诸如以下的行:

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

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

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

笔记:

  • 我通过 SSH 连接到这台机器TERM=xterm-256color
  • 无需通过管道less,我就能在终端上获得颜色。

答案1

根据要求发布为答案。

这里有两个问题:

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

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

您可以通过传递选项或 来强制less将颜色代码发送到终端。后者更安全,因为它只允许实际 ANSI 颜色的代码。-r-R

总结一下:

gcc -fdiagnostics-color=always a.c 2>&1 | less -R

相关内容