MinGW/MSYS 外壳颜色

Posted

技术标签:

【中文标题】MinGW/MSYS 外壳颜色【英文标题】:MinGW/MSYS shell colors 【发布时间】:2011-06-02 15:04:06 【问题描述】:

我想对我的 makefile 输出进行颜色编码。

但我无法让 ANSI 颜色代码在此终端上工作。不过应该有可能,ls --color 给了我彩色的输出,我的 shell 提示也是彩色的:

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

我怀疑第一部分可能将终端置于特殊模式,以便它接受颜色代码。谁能解释一下?

【问题讨论】:

【参考方案1】:

我解决了。

要使用的命令是echo -e

所以,在makefile中:

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

我想这在 bash 中也可以正常工作。

【讨论】:

虽然我会指出我仍然没有弄清楚如何让任意程序将终端切换到正确的模式以解释颜色信号。目前,为了让我的单元测试打印出来,我必须通过 cat 管道命令,例如。 对于初学者来说,通过 cat 的管道输出增加了一层缓冲延迟。对于构建脚本的输出来说这不是问题,但如果你有一些交互的东西,它或多或少是可怕的。 我改用printf。它工作得很好,你可以获得额外的字符串插值,很好地与通用消息函数一起使用,你可以使用减号 v (-v VAR) 选项将 stdout 值分配给变量,通常它被认为比 @ 更便携987654325@。虽然我不确定它是否存在于 MinGW 中,因为我正在运行 GoW(Windows 上的 GNU)和其他一些 win32 编译的 *nix 工具,我将它带到了这个系统。哦,也没有强制的-e 开关,它只是作为printf "\033[32mFoo\033[0m"printf "\033[32m%s\033[0m" "foo" 都有效。

以上是关于MinGW/MSYS 外壳颜色的主要内容,如果未能解决你的问题,请参考以下文章

用于打开外壳、在外壳中运行命令并保持外壳运行的 Bash 脚本

文件外壳是啥

作业感知外壳与作业不感知外壳执行程序

linux-外壳内核与shell的关系

在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw

基于应用外壳的架构