Contents

Linux中更改终端的输出颜色

1. 概述

在本教程中,我们将了解如何在 Linux 终端中更改颜色,完全可以从命令行进行。

2. ANSI 转义码

ANSI 转义码是标准化命令,用于在终端或终端仿真器中操纵文本的行为和外观。

颜色变化的模式是“ESC[foreground_color_code;background_color_code m]”。让我们编写一个脚本,使用echo命令在绿色背景上打印红色文字“Hello world” ,然后将颜色重置为正常:

#!/bin/sh
RED_ON_GREEN='\033[31;42m'
RESET='\033[0m'
echo "${RED_ON_GREEN}Hello world${RESET}"

“\033”是在终端中编码 ESC 字符的最平台无关的方式,尽管在 Linux 上,您也可以使用引用“\e”。另外,值得注意的是颜色设置没有以任何方式封装。

因此,如果我们不重置它们,它们就会溢出到我们的脚本之外,这在大多数情况下是不可取的。

我们可以在维基百科上找到完整的颜色代码列表

3. tput命令

直接使用 ANSI 转义码可以正常工作。但是,它也有一些缺点。对于初学者,我们对背景和前景的相同颜色使用不同的代码。此外,我们需要依靠一些特定的编码来编码 ESC 字符或使用可能不可移植的字符引用。

最后,它们的可读性差,看起来有点乱。

幸运的是,还有另一种选择:tput 命令。它使我们能够查询terminfo 数据库,并提供了一种方便的方法来提取我们需要的转义码。

让我们重新创建上一节中的脚本:

#!/bin/sh
RED_FG=`tput setaf 1`
GREEN_BG=`tput setab 2`
RESET=`tput sgr0`
echo "${RED_FG}${GREEN_BG}Hello world${RESET}"

tput setaf ”设置前景色,“ tput setab ”设置背景色,“ tput sgr0 ”将所有设置重置为终端默认值。有 8 种标准颜色,用 0 到 7 的数字编码(顺序为:黑色、红色、绿色、黄色、蓝色、品红色、青色、白色)。

4. 不只是颜色

ANSI 转义码和类似的tput命令不仅仅可以用于更改颜色。它们的全部功能远远超出了本文的范围,但我们将看看在日常脚本编写中可能有用的样式选项。

让我们编写一个脚本,以一秒的间隔在同一行中显示普通文本、粗体文本和下划线文本:

#!/bin/sh
MOVE_UP=`tput cuu 1`
CLEAR_LINE=`tput el 1`
BOLD=`tput bold`
UNDERLINE=`tput smul`
RESET=`tput sgr0`
echo "This is normal text"
sleep 1
echo "${MOVE_UP}${CLEAR_LINE}${BOLD}This is bolded"
sleep 1
echo "${MOVE_UP}${CLEAR_LINE}${UNDERLINE}This is underlined${RESET}"