Linux 如何以跨平台的方式以彩色打印到控制台?
如何在Mac OS X和Linux上使用“printf”输出彩色文本?您可以使用ANSI颜色代码。下面是一个示例程序: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
#包括
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”来实现它。我确实觉得有必要指出,我给出了我的答案作为替代:“另一个选项是:”,而不是说这实际上是答案。