MinGW/MSYS shell 颜色

3
我希望我的makefile输出能够以彩色显示。
但是在这个终端上,我无法让ANSI颜色代码起作用。尽管这应该是可能的,因为“ls --color”命令给出了彩色的输出,并且我的shell提示符也是彩色的:
$ echo $PS1
\[\033]0;$MSYSTEM:\w\007 \033[32m\]\u@\h \[\033[33m\w\033[0m\] $

我猜想第一部分可能是将终端放入特殊模式,以便接受颜色代码。有人能解释一下吗?

1个回答

6

我已经解决了。

使用的命令是echo -e

因此,在makefile中:

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

我想这在bash中也可以很好地工作。

2
虽然我要指出的是,我仍然没有弄清楚如何让任意程序切换终端到正确的模式来解释颜色信号。目前为了使我的单元测试输出变得漂亮,我必须通过cat命令进行管道传输,例如。 - Steven Lu
对于不熟悉的人来说,通过cat管道输出会增加一层缓冲延迟。这对于构建脚本的输出并不是问题,但如果你有交互式的东西,那就更或多或少是可怕的。 - Steven Lu
我使用 printf 代替 echo。它非常好用,可以进行字符串插值,适用于通用消息函数等等。你可以使用减号 v (-v VAR) 选项将 stdout 值分配给变量,而且通常被认为比 echo 更具可移植性。虽然我不确定它是否原生存在于 MinGW 中,因为我正在运行 GoW (GNU on Windows) 和其他一些 win32 编译的 *nix 工具。哦,而且也没有强制 -e 开关,只需像这样使用 printf "\033[32mFoo\033[0m"printf "\033[32m%s\033[0m" "foo" 即可。 - Rob Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接