如何在Linux终端输出带有颜色的文本?

24 浏览
0 Comments

如何在Linux终端输出带有颜色的文本?

如何在支持彩色字符的Linux终端打印彩色字符?\n如何判断终端是否支持颜色代码?

0
0 Comments

如何在Linux终端中输出彩色文本?

在输出任何颜色之前,需要确保处于终端环境中。可以使用以下命令检查终端环境:

[ -t 1 ] && echo 'Yes I am in a terminal'  # isatty(3) call in C

然后需要检查终端是否支持彩色输出。在基于Linux的系统上,可以通过以下命令获取终端支持的颜色数量:

Number_Of_colors_Supported=$(tput colors)

在基于BSD的系统上,可以通过以下命令获取终端支持的颜色数量:

Number_Of_colors_Supported=$(tput Co)

然后根据结果做出决定:

[ ${Number_Of_colors_Supported} -ge 8 ] && {
    echo 'You are fine and can print colors'
} || {
    echo 'Terminal does not support color'
}

如果终端支持彩色输出,则可以使用以下命令定义颜色变量:

在基于BSD的系统上:

fg_black="$(tput AF 0)"
fg_red="$(tput AF 1)"
fg_green="$(tput AF 2)"
fg_yellow="$(tput AF 3)"
fg_blue="$(tput AF 4)"
fg_magenta="$(tput AF 5)"
fg_cyan="$(tput AF 6)"
fg_white="$(tput AF 7)"
reset="$(tput me)"

在基于Linux的系统上:

fg_black="$(tput setaf 0)"
fg_red="$(tput setaf 1)"
fg_green="$(tput setaf 2)"
fg_yellow="$(tput setaf 3)"
fg_blue="$(tput setaf 4)"
fg_magenta="$(tput setaf 5)"
fg_cyan="$(tput setaf 6)"
fg_white="$(tput setaf 7)"
reset="$(tput sgr0)"

然后可以使用以下方式输出彩色文本:

echo -e "${fg_red}  Red  ${fg_green} Bull ${reset}"

这样就可以在Linux终端中输出彩色文本了。

0
0 Comments

如何在Linux终端中输出彩色文本?

问题的原因是作者编写了一个C++类,用于设置输出的前景色和背景色。作者提供了一个示例程序,演示了如何打印出“This ->word<- is red.”并以红色突出显示“word”的前景色。

解决方法是使用一个名为"colormod.h"的头文件来定义一个名为Color的命名空间。在命名空间中,定义了一个Modifier类,其作用是将颜色代码添加到输出流中,以实现彩色文本的输出。然后在主函数中,通过创建Modifier对象并将其传递给输出流,来设置输出的颜色。

在进阶部分,作者提到可以为该类添加其他功能,例如添加洋红色和加粗等样式。并提供了一个参考链接,以便了解如何添加更多颜色和样式。

其他评论中也提到了一些额外的颜色选项,并提出了一些改进的建议,如定义operator<<来直接输出颜色代码,或者通过添加一个标志来控制是否显示彩色文本。

,要在Linux终端中输出彩色文本,可以使用作者提供的C++类和头文件,通过创建Modifier对象并将其传递给输出流,来设置输出的颜色。还可以根据需要添加其他颜色和样式的代码,并通过改进提供的代码,实现更多功能和控制选项。

0
0 Comments

如何在Linux终端中输出彩色文本?

你需要输出ANSI颜色码。请注意,不是所有的终端都支持这个功能;如果不支持颜色序列,将会显示垃圾字符。

示例:

cout << "\033[1;31mbold red text\033[0m\n";

在这里,`\033`是ESC字符,ASCII码为27。紧随其后的是`[`,然后是由`;`分隔的零个或多个数字,最后是字母`m`。这些数字描述了从该点开始切换到的颜色和格式。

前景色和背景色的代码如下:

foreground background
black        30         40
red          31         41
green        32         42
yellow       33         43
blue         34         44
magenta      35         45
cyan         36         46
white        37         47

另外,你还可以使用以下代码:

reset             0  (所有都恢复为正常状态)
bold/bright       1  (通常是同一种颜色的更亮的阴影)
underline         4
inverse           7  (交换前景色和背景色)
bold/bright off  21
underline off    24
inverse off      27

参见维基百科上的表格,获取其他不常见的支持代码。


要确定你的终端是否支持颜色序列,请读取`TERM`环境变量的值。它应该指定所使用的特定终端类型(例如`vt100`,`gnome-terminal`,`xterm`,`screen`等)。然后在terminfo数据库中查找该值,并检查`colors`功能是否存在。

这在BBS上非常流行...

`m`是什么意思?

从表格上看,它似乎非常随意。

这个ANSI称为"SGR代码"或"设置图形修饰",用于修改属性。大多数终端都支持前8种颜色,但是对于上面的颜色,可能会出现问题。当然,这不会对任何东西造成伤害,但最好不要养成这个习惯,更不应该传播这种建议。看看下一个答案,有更好的主意(我在这里是公正的),你应该避免检查terminfo,因为有很多库和二进制文件可以为你做这个。

`\033[`和`m`标记了ANSI颜色代码转义序列的开始和结束。参考:en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes

我使用它定义“操纵器”,例如`const std::string red("\033[0;31m");`或`const std::string reset("\033[0m");`。然后,我可以简单地写`cout << red << "red text" << reset << endl;`。

我会查看这个网站以可视化颜色:misc.flogisoft.com/bash/tip_colors_and_formatting

显然,这对其他语言也适用,比如Java!谢谢!

0