Linux 如何以跨平台的方式以彩色打印到控制台?

Linux 如何以跨平台的方式以彩色打印到控制台?,linux,macos,console,colors,Linux,Macos,Console,Colors,如何在Mac OS X和Linux上使用“printf”输出彩色文本?您可以使用ANSI颜色代码。下面是一个示例程序: #包括 int main(int argc,char*argv[]) { printf(“%c[1;31mHello,world!\n”,27);//红色 printf(“%c[1;32mHello,world!\n”,27);//绿色 printf(“%c[1;33mHello,world!\n”,27);//黄色 printf(“%c[1;34mHello,world!\n

如何在Mac OS X和Linux上使用“printf”输出彩色文本?

您可以使用ANSI颜色代码。下面是一个示例程序:

#包括
int main(int argc,char*argv[])
{
printf(“%c[1;31mHello,world!\n”,27);//红色
printf(“%c[1;32mHello,world!\n”,27);//绿色
printf(“%c[1;33mHello,world!\n”,27);//黄色
printf(“%c[1;34mHello,world!\n”,27);//蓝色
返回0;
}
27
转义
字符。如果愿意,可以使用
\e


网络上有所有代码的列表。

为了获得最佳的可移植性,请查询数据库。在shell中

colors=(black red green yellow blue magenta cyan white)
for ((i = 0; i < ${#colors[*]}; i++)); do
    ((j=(i+1)%${#colors[*]}))
    printf '%s%s%s on %s%s\n' "$(tput setaf $i)" "$(tput setab $j)" \
            "${colors[i]}" "${colors[j]}" "$(tput op)"
done
colors=(黑-红-绿-黄-蓝-品红-青-白)
对于((i=0;i<${#colors[*]};i++);do
((j=(i+1)%${#颜色[*]}))
printf“%s%s%s在%s%s上\n'$(tput setaf$i)”“$(tput setab$j)”\
“${colors[i]}”“${colors[j]}”“$(tput op)”
完成
将打印出来

black on red red on green green on yellow yellow on blue blue on magenta magenta on cyan cyan on white white on black 红黑相间 红绿相间 黄绿相间 蓝中带黄 洋红上的蓝色 青色上的洋红 青白相间 黑白相间 但是颜色。

另一个选项是:

# Define some colors first (you can put this in your .bashrc file): red='\e[0;31m' RED='\e[1;31m' blue='\e[0;34m' BLUE='\e[1;34m' cyan='\e[0;36m' CYAN='\e[1;36m' green='\e[0;32m' GREEN='\e[1;32m' yellow='\e[0;33m' YELLOW='\e[1;33m' NC='\e[0m' ################# #首先定义一些颜色(您可以将其放入.bashrc文件中): 红色='\e[0;31m' 红色='\e[1;31m' 蓝色='\e[0;34m' 蓝色='\e[1;34m' 青色='\e[0;36m' 青色='\e[1;36m' 绿色='\e[0;32m' 绿色='\e[1;32m' 黄色='\e[0;33m' 黄色='\e[1;33m' NC='\e[0m' ################# 然后,您可以在终端中键入:

echo -e "${RED}This is an error${NC}" echo -e "${YELLOW}This is a warning${NC}" echo -e "${GREEN}Everythings fine!${NC}" echo-e“${RED}这是一个错误${NC}” echo-e“${YELLOW}这是一个警告${NC}” echo-e“${GREEN}一切都很好!${NC}”
不要忘记结尾处的${NC}。NC代表“无颜色”,这意味着在您的句子之后,它将恢复为正常颜色。如果您忘记了它,那么之后的整个提示和命令将使用您指定的颜色(当然,您可以键入'echo-e“${NS}”将其更改回来),27@ephemient,甚至
\e
都在我的机器上工作。OS X的终端和大多数linux控制台应用程序都支持ANSI转义序列,所以我认为这满足了他的问题。如果我没记错的话,
\e
是gcc-only。你有没有可能更详细地解释一下新手的情况?printf中似乎什么都没有关于它的文档。是什么导致这种语法以这种方式工作?只是好奇地想更好地理解它!谢谢:)@Hendeca,那是因为它与
printf
无关。终端程序本身将这些转义码解释为改变屏幕颜色的命令。+1很好,但我如何从C中做到这一点?我似乎找不到tput的等效库-可能直接从开源中删除它?这在mac终端(OS X v10.9.1)中似乎不起作用-我没有把它放在.bashrc中,只是在命令行的shell中定义了它-但是文本是直接打印出来的。问题是关于“printf”命令,而不是终端命令。此外,还请求了一个跨平台的解决方案,“把这个放在你的.bashrc中”不是那样。@TimZaman嗯,从技术上讲,OP请求了一个解决方案“在Mac OS X和Linux上”,所以把它放在.bashrc中就是这样。虽然我同意它没有回答如何使用“printf”来实现它。我确实觉得有必要指出,我给出了我的答案作为替代:“另一个选项是:”,而不是说这实际上是答案。