2011-06-02 34 views
3

我想爲我的makefile輸出進行顏色編碼。MinGW/MSYS shell的顏色

但我無法獲得ANSI顏色代碼在此終端上工作。它應該是可能的,雖然,ls --color給了我豐富多彩的輸出,和我的shell提示符也是有色:

$ echo $PS1 
\[\033]0;$MSYSTEM:\w\007 \033[32m\]\[email protected]\h \[\033[33m\w\033[0m\] $ 

我猜想也許是第一部使終端在特殊模式下,使其接受的顏色代碼。有人可以解釋嗎?

回答

6

我解決了它。

要使用的命令是echo -e

因此,在makefile:

foo.o: foo.c 
    @echo -e "\033[32mCompiling foo.c\033[0m" 
    $(CC) $(CFLAGS) -c -o [email protected] $< 

我可以想象這個工作在bash也很不錯。

+2

雖然我會指出,我還沒有想出如何讓一個任意程序將終端切換到正確的模式來解釋彩色信號。例如,目前爲了讓我的單元測試打印出所有漂亮的內容,我必須通過cat來傳遞命令。 – 2011-11-17 15:06:44

+0

和對於未開始的,通過貓的管道輸出增加了一層緩衝等待時間。構建腳本的輸出不是問題,但如果你有一些互動的東西,這或多或少是可怕的。 – 2013-03-14 04:04:23

+0

我使用'printf'代替。它工作的很好,你可以得到額外的字符串插值,很適合用於通用消息函數,不過,你可以使用減號v('-v VAR')選項將stdout值賦值給一個變量,並且通常認爲它更便攜比'echo'。雖然我不確定自從我運行GoW(GNU on Windows)以及其他幾個win32編譯的* nix工具後,MinGW中它是否存在於本機中。哦,也沒有義務的'-e'開關,它只是作爲'printf'\ 033 [32mFoo \ 033 [0m「'或'printf」\ 033 [32m%s \ 033 [0m「」foo「'都是有效。 – 2014-04-24 19:37:26