为 Bash 脚本添加颜色
我最近为一个服务器编写了一个接收后 git hook,希望能轻松地区分 hook 的输出和 git 信息。这让我开始研究如何为 bash 输出着色。
通过使用 ANSI 颜色转义码,我们可以为输出字符串添加颜色。ANSI 标准指定了特定的颜色代码;
颜色 | 前台代码 | 背景代码 |
---|---|---|
黑色的 | 三十 | 40 |
红色的 | 31 | 41 |
绿色的 | 三十二 | 四十二 |
黄色的 | 33 | 43 |
蓝色的 | 三十四 | 四十四 |
品红 | 三十五 | 45 |
青色 | 三十六 | 46 |
浅灰色 | 三十七 | 四十七 |
灰色的 | 90 | 100 |
浅红色 | 91 | 101 |
浅绿色 | 92 | 102 |
浅黄色 | 93 | 103 |
浅蓝色 | 94 | 104 |
浅洋红色 | 95 | 105 |
浅青色 | 96 | 106 |
白色的 | 97 | 107 |
要更改文本的颜色,我们需要的是前景代码。此外,还有一些与我们相关的非颜色特殊代码:
代码 | 描述 |
---|---|
0 | 重置/正常 |
1 | 粗体文本 |
2 | 文字模糊 |
3 | 斜体 |
4 | 带下划线的文本 |
该echo
命令会打印出文本。我们需要告诉它,我们处理的是特殊的 ANSI 代码,而不仅仅是常规字符。这可以通过\e
在开头添加一个转义序列来实现。用于指定颜色代码的转义序列是\e[COLORm
(在本例中,COLOR 代表我们的颜色代码)。默认情况下,echo
不支持转义序列。我们需要添加-e
选项来启用它们的解释。
因此,为了打印红色文本,我们可以
echo -e "\e[32mRed text\e[0m"
这\e[0m
意味着我们使用特殊代码 0 将文本颜色重置回正常状态。如果没有这个代码,之后打印的所有其他文本都将是红色的。
这是可行的,但如果我们将颜色代码存储在变量中并使用它们,它将更具可读性。
RED="\e[31m"
ENDCOLOR="\e[0m"
echo -e "${RED}Red text${ENDCOLOR}"
把所有这些放在一起,我们可以得到这样的脚本
#! /usr/bin/env bash
RED="\e[31m"
GREEN="\e[32m"
ENDCOLOR="\e[0m"
echo -e "${RED}This is some red text, ${ENDCOLOR}"
echo -e "${GREEN}And this is some green text${ENDCOLOR}"

我们可以组合转义码来获得更精美的输出。
#! /usr/bin/env bash
RED="31"
GREEN="32"
BOLDGREEN="\e[1;${GREEN}m"
ITALICRED="\e[3;${RED}m"
ENDCOLOR="\e[0m"
echo -e "${BOLDGREEN}Behold! Bold, green text.${ENDCOLOR}"
echo -e "${ITALICRED}Italian italics${ENDCOLOR}"

你可以用多种方式使用这些功能,让你的脚本更简洁。具体组合由你决定。祝你脚本编写愉快!
文章来源:https://dev.to/ifenna__/adding-colors-to-bash-scripts-48g4