【发布时间】:2011-01-22 03:28:21
【问题描述】:
如何在 Mac OS X 和 Linux 上使用“printf”输出彩色文本?
【问题讨论】:
标签: linux macos console colors
如何在 Mac OS X 和 Linux 上使用“printf”输出彩色文本?
【问题讨论】:
标签: linux macos console colors
您可以使用 ANSI 颜色代码。这是一个示例程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%c[1;31mHello, world!\n", 27); // red
printf("%c[1;32mHello, world!\n", 27); // green
printf("%c[1;33mHello, world!\n", 27); // yellow
printf("%c[1;34mHello, world!\n", 27); // blue
return 0;
}
27 是 escape 字符。如果您愿意,可以使用\e。
网络上有所有代码的列表。 Here is one.
【讨论】:
"\033" 而不是"%c", 27。
\e 在我的机器上工作。 OS X 的终端和大多数 linux 控制台应用程序都支持 ANSI 转义序列,所以我认为它满足了他的问题。
\e 是 gcc-only。
printf 无关。是终端程序本身将这些转义码解释为更改其在屏幕上使用的颜色的命令。
另一种选择是:
# 首先定义一些颜色(你可以把它放在你的 .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}这是一个错误${NC}" echo -e "${YELLOW}这是一个警告${NC}" echo -e "${GREEN}一切正常!${NC}"不要忘记最后的 ${NC}。 NC 代表“no color”,意思是说完你的句子后,它会恢复到正常颜色。如果你忘记了,之后的整个提示和命令将采用你指定的颜色(当然你可以输入 'echo -e "${NS}"' 将其改回)。
【讨论】:
为获得最佳可移植性,请查询terminfo 数据库。在外壳中,
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
会打印出来
红底黑字 绿底红字 黄底绿 蓝底黄 洋红色上的蓝色 青色上的洋红色 白底青色 黑底白字但有颜色。
【讨论】: