我有以下一段代码。
bold=''
reset=$(echo -en '\033[0m')
black=$(echo -en '\e[1;30m')
magenta=$(echo -en '\033[00;35m')
blue=$(echo -en '\e[1;34m')
cyan=$(echo -en '\e[1;36m')
green=$(echo -en '\e[1;32m')
orange=$(echo -en '\e[1;33m')
purple=$(echo -en '\e[1;35m')
red=$(echo -en '\e[1;31m')
white=$(echo -en '\e[1;37m')
yellow=$(echo -en '\e[1;33m')
lime_yellow=$(echo -en '\e[1;33m')
power_blue=$(echo -en '\e[1;34m')
blink=$(echo -en '\e[1;31m')
reverse=$(echo -en '\e[1;31m')
underline=$(echo -en '\e[1;31m')
if [ -x /usr/bin/tput ] && tput setaf 1 &>/dev/null; then
echo "tput color is supported."
tput sgr0 # Reset colors
bold=$(tput bold)
reset=$(tput sgr0)
black=$(tput setaf 0)
magenta=$(tput setaf 5)
blue=$(tput setaf 33)
cyan=$(tput setaf 37)
green=$(tput setaf 64)
orange=$(tput setaf 166)
purple=$(tput setaf 125)
red=$(tput setaf 124)
white=$(tput setaf 15)
yellow=$(tput setaf 136)
lime_yellow=$(tput setaf 190)
power_blue=$(tput setaf 153)
blink=$(tput blink)
reverse=$(tput smso)
underline=$(tput smul)
else
echo "tput color is not supported. Use old school colors."
fi
echo ${red}RED${green}GREEN${yellow}YELLOW${blue}BLUE${purple}PURPLE${cyan}CYAN${white}WHITE${reset}
基本上有两种颜色,tput
生成的或老式的转义字符,如\e[1;32m
. 由于tput
类型更有趣,例如它支持闪烁和下划线,因此代码tput
尽可能使用类型颜色。这是一张证明它在 Oracle Linux 7.6(有点像 RedHat 或 CentOS)GUI 环境中按预期工作的图像。
当我从其他终端运行它时,它不起作用。例如,下面是在 MobaXterm 中运行时的快照。
我也试过putty
了,也不行。我的代码有什么问题吗?
更新
我echo $TERM
在每个终端执行,下面是结果。
带有桌面环境的 Oracle Linux(彩色作品) 输出:xterm-256color Windows 上的 MobaXterm(颜色不起作用) 输出:xterm Windows 上的腻子(颜色不起作用) 输出:xterm
您必须将您的终端类型配置为
putty
、putty-256color
,或者putty-sco
在使用 PuTTY 或基于它的东西(例如 MobaXTerm)时。它们是 terminfo 数据库中的条目正确描述 PuTTY的唯一终端类型。一个普遍的错误假设是终端仿真器都与 XTerm 兼容,并且 terminfo 数据库中的
xterm
和xterm-256color
条目正确地描述了它们。这种错误想法在 Thomas Dickey 的 XTerm FAQ 中被指出,值得注意的是
xterm
和xterm-256color
条目甚至没有描述 XTerm 的所有版本,更不用说其他终端仿真器了。The
putty
entry in the terminfo database describes a terminal that is only capable of 8 ECMA-48 colours. As, indeed, does thexterm
entry. But merely switching fromxterm
toxterm-256colour
is wrong. PuTTY differs from XTerm.In fact, PuTTY is quite capable of indexed colour (256 colours from a palette) using ISO/IEC 8613 control sequences. Indeed, since 2017 it is quite capable of direct colour (24-bit RGB colour) using ISO/IEC 8613 control sequences. The
putty-256colour
entry describes the former. terminfo does not have a way to fully describe the latter.Use the correct terminal type, and
tput
will look up the correct control sequences.Further reading
这些代码应该可以工作:
除了8种基本颜色之外,不支持颜色的是终端的能力。我找到了这段代码来测试所有可用的颜色(来源:tput setaf 颜色表?如何确定颜色代码?):
以下是我测试过的所有三个终端的输出。
带有桌面环境的 Oracle Linux
Windows 上的 MobaXterm
Windows 上的腻子
所以它的终端不支持除了 8 种基本颜色之外的颜色。为了安全和便携,请仅使用这 8 种颜色。