2011-06-02 95 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