Terminal

讓 gcc 管道化以在終端上正確顯示顏色

  • October 7, 2016

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

引用自:https://unix.stackexchange.com/questions/314966