C代码改变终端文本颜色; 如何恢复默认值?Linux的

jas*_*r77 18 c c++ linux terminal colors

我在Linux上运行了一个C文件.它以红色(失败)打印一些线条,以绿色(通过)打印一些线条.正如您所料,它在printf语句中使用转义码,如下所示:

#define BLACK  "\033[22;30m"
#define GREEN  "\033[22;31m"

printf(GREEN "this will show up green" BLACK "\n");
Run Code Online (Sandbox Code Playgroud)

如果最后的BLACK不存在,终端文本将继续为所有内容为绿色.如果你没有抓住它,那对于具有非黑色背景的终端窗口来说没问题,但是否则你最终会得到黑底黑字.不好!运行程序有这个问题,捕获文本文件中的输出,然后使用"更多"或"更少"查看文件也是如此.

是否有代码恢复默认值而不是在printf语句的末尾指定颜色?这需要在C中,但我有兴趣阅读其他方法.

更新: 谢谢大家.您的回复帮助我在其他地方找到更有用的信息.我更新了我的宏如下(注意31是红色的,我修正了下面的拼写错误):

#define RESET_COLOR "\e[m"
#define MAKE_GREEN "\e[32m"

printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n");
Run Code Online (Sandbox Code Playgroud)

我发现以下链接有助于理解这些代码的工作原理:

http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html 解释了这些转义序列的作用,并在可移植性时使用ncurses需要.

http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html

http://bluesock.org/~willg/dev/ansi.html显示更多的转义序列; 有用的了解大局

Frx*_*rem 23

尝试使用:

#define RESETCOLOR "\033[0m"
Run Code Online (Sandbox Code Playgroud)

这应该将其重置为默认值.

有关这些终端代码的更多信息,请访问:http://en.wikipedia.org/wiki/ANSI_escape_code