术语中的“颜色”是否总是意味着我可以使用颜色?

术语中的“颜色”是否总是意味着我可以使用颜色?

以下内容是否应该始终表明我可以使用转义序列并对tput事物进行着色?

if [[ $TERM == *"color"* ]]; then
  true
else
  false
fi

答案1

否:终端描述的名称无关。 TERM是终端描述的名称。有很多,而且大多数支持颜色的终端名称中都没有“颜色”。例如,没有理由不能将终端描述命名为“无颜色”。

使用终端描述的程序查看能力列于其中。当然,有很多硬编码程序会假设有关终端描述名称的信息。

根据 ncurses FAQ我的终端无法识别颜色,终端描述应该说明终端支持多少种颜色,以及如何设置前景色和背景色。

您可以使用tput获取颜色数量:

colors=$(tput colors)
if [ $colors -gt 1 ]

因为缺少colors能力会导致tput返回-1

相关内容