我想编写一个 bash 脚本,将一些信息打印到终端 STDOUT。为了提高可读性和结构性,我想用颜色标记不同的项目并以此方式突出显示它们。
现在,是否有与 Windows-CMD/DOS 命令等效的 Bash 命令来COLOR
设置当前使用的背景和字体颜色?完成脚本后,如何将颜色重置回终端默认值?
编辑:
我已阅读Pipeable 命令可以彩色打印吗?,但只有一些答案是用 Bash 编写的,以便可以轻松地将它们包含在我的脚本中。除此之外,那里的答案缺少我想要的以下几点:
- 更改背景颜色
- 显示白色前景色,
gnome-terminal
而是显示设置的默认颜色(对我来说是霓虹绿) - 以某种方式使所有可用颜色都可访问,而不仅仅是通过关键字访问一小部分子集。我可以想象,例如,某种 RGB 编码可作为函数参数传递,以便轻松指定颜色。
答案1
获取密码的小脚本;)
#!/bin/bash
#
# This file echoes a bunch of color codes to the
# terminal to demonstrate what's available. Each
# line is the color code of one forground color,
# out of 17 (default + 16 escapes), followed by a
# test use of that color on all nine background
# colors (default + 8 escapes).
#
T='gYw' # The test text
echo -e "\n 40m 41m 42m 43m\
44m 45m 46m 47m";
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
' 36m' '1;36m' ' 37m' '1;37m';
do FG=${FGs// /}
echo -en " $FGs \033[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
done
echo;
done
echo
从生成前一个脚本的表中可以很容易地读取代码。
\e[1;37m\e[44m
\e[1;37m
– 前景\e[44m
- 背景
一些例子
白色前景
TOA="\e[0m" # No Color whiteForeground="\e[1;37m" echo -e "${whiteForeground}foo${TOA}"
蓝底白字
TOA="\e[0m" # No Color whiteOnBlue="\e[1;37m\e[44m" echo -e "${whiteOnBlue}foo${TOA}"
以及一个示例 bash 脚本:
red="\e[0;31m"
green="\e[0;32m"
yellow="\e[0;33m"
blue="\e[0;34m"
TOA="\e[0m" # No Color
if [[ $cfg_log_level == "" ]]; then
cfg_log_level=4
fi
function logError () {
if [[ $cfg_log_level == "1" ]] || [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${red}$1${TOA}" 1>&2
fi
}
function logWarn () {
if [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${yellow}$1${TOA}" 1>&2
fi
}
function logInfo () {
if [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
echo -e "${green}$1${TOA}" 1>&2
fi
}
function logDebug () {
if [[ $cfg_log_level == "4" ]]; then
echo -e "${blue}$1${TOA}" 1>&2
fi
}
答案2
你可以使用tput
tput setaf <color>
设置前景色tput setab <color>
设置背景颜色
颜色是 1 位b,g,r:
0.黑色 1. 红色 2. 绿色 3. 黄色 4. 蓝色 5. 洋红色 6. 青色 7.白色
tput 可以设置字符的其他属性,如下划线、粗体、闪烁等。man terminfo
有关更多信息,请参阅。
我认为使用它的一个好方法是通过语义设置变量。即
startheader=`tput setaf 0``tput setab 7` endheader=`输入 sgr0` startprompt=`输入粗体` endprompt=$endheader echo ${startheader}标题${endheader} echo -n ${startprompt}输入值:${endprompt} 读取值