龙空技术网

Linux终端如何以不同颜色打印文本?

SuperOps 762

前言:

目前我们对“linux命令行改变文本颜色”可能比较注意,朋友们都想要了解一些“linux命令行改变文本颜色”的相关文章。那么小编在网摘上搜集了一些关于“linux命令行改变文本颜色””的相关内容,希望小伙伴们能喜欢,你们快快来了解一下吧!

在程序中避免直接编码 ANSI 颜色转义序列!可以使用 tput 命令与终端数据库进行交互,以更合理的方式进行操作:

Cygwin 用户:要使用 tput 命令,您需要安装 ncurses 软件包。

tput 命令读取 terminfo 数据库,该数据库包含了与您的终端交互所需的所有转义代码,这些代码由 $TERM 变量定义。有关更多详细信息,请参阅 terminfo(5)手册页。

tput sgr0 将颜色重置为默认设置。它还会关闭加粗(tput bold)、下划线等。

如果您想要在提示符中使用漂亮的颜色,请考虑使用一些可管理的内容:

请注意,我们没有直接编码 ANSI 颜色转义序列。相反,我们将 tput 命令的输出存储在变量中,并在展开 $PS1 时使用这些变量。通过存储这些值,我们避免了每次显示提示符时都要派生 tput 进程的开销;tput 命令仅在 shell 启动期间被调用了 4 次。而方括号([ 和 ])允许 bash 知道哪些部分不会导致光标移动;如果没有它们,行将会错误地换行。

以下是在 256 色终端中选择颜色的函数:

以下是更详细范围的终端序列变量。根据您的需要选择相应的变量:

在上面的示例中,我们使用了\033作为ANSI转义序列的起始,并使用m作为结束。注意,我们在echo​命令中使用了-e​选项,以便让echo​解释转义序列。

运行上面的脚本将在终端中以不同的颜色打印文本。

请注意,不同的终端模拟器可能对 ANSI 转义序列的支持有所不同。此外,某些终端可能需要在转义序列之前添加 \e 或 \x1b。因此,建议在编写脚本时进行测试以确保所使用的转义序列在目标终端上起作用。

在某些情况下,可能会更方便使用 Shell 脚本中的变量来表示颜色和样式。例如:

讨论

这可能会引起争议,但我不同意并建议您使用硬编码的 ANSI 转义序列,因为现实世界中的 terminfo 数据库经常存在问题。

tput setaf 字面意思是“设置 ANSI ”,与硬编码的 ANSI 转义序列没有任何区别,除非它可以在破损的 terminfo 数据库中正常工作,这样您的颜色在具有终端类型 linux-16color 或任何具备 16 种 ANSI 颜色功能的终端上看起来才会正确。

所以,请考虑将这些变量设置为硬编码的 ANSI 序列,例如:

使用硬编码的 ANSI 转义序列:这种方法直接在脚本中使用硬编码的 ANSI 转义序列,例如 \e[1;31m​ 表示粗体红色。这种方法简单直接,不依赖于外部库或配置文件,可以在大多数终端上正常工作。但是,它可能会导致代码的可读性较差,并且难以维护和修改。使用终端库:许多编程语言都有终端库,可以通过库函数来设置终端的颜色和样式。这种方法可以提高代码的可读性和可维护性,并且可以根据终端的特性灵活地调整颜色。但是,它需要依赖外部库,并且可能在某些终端上不起作用或产生意外行为。使用配置文件:另一种方法是将颜色和样式信息存储在配置文件中,然后在脚本中读取配置文件来设置终端。这种方法可以将颜色和样式与脚本逻辑分离,方便管理和修改。但是,它需要额外的配置文件,并且可能需要额外的代码来解析配置文件。

选择哪种方法取决于您的具体需求和偏好。如果您只是编写一个简单的脚本,并且只需要一些基本的颜色和样式,那么硬编码的 ANSI 转义序列可能是最简单和直接的方法。如果您需要更复杂的样式控制,并且希望代码更具可读性和可维护性,那么使用终端库或配置文件可能更合适。

更多

如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

标签: #linux命令行改变文本颜色