Terminal
讓 gcc 管道化以在終端上正確顯示顏色
我正在用 gcc 編譯一個文件(實際上我正在製作,但沒關係),它會向 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
,我確實得到了終端上的顏色。
根據要求發布作為答案。
這裡有兩個問題:
- 預設情況下
gcc
,僅當輸出為終端時才列印顏色程式碼。- 預設情況下
less
不向終端發送原始顏色字元。您可以通過傳遞選項來強制
gcc
列印顏色程式碼-fdiagnostics-color=always
。請注意,這會破壞依賴解析編譯器錯誤的各種工具。您可以
less
通過傳遞選項-r
或-R
. 後者更安全,因為它只允許實際 ANSI 顏色的程式碼。總結一下:
gcc -fdiagnostics-color=always a.c 2>&1 | less -R