我正在使用 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