回显彩色文本,动态改变颜色

回显彩色文本,动态改变颜色

有什么方法可以在控制台上打印彩色文本,该文本不断动态地改变其颜色(有或没有指定的时间间隔),就像一些问候语改变颜色的贺卡一样?

我知道使用打印彩色文本

echo eg: echo -e "\e[1;34m Hi dude, Welcome to the Matrix \e[0m" 

但我希望这段文字不断改变颜色。

实际上可能吗?

答案1

您无法打印带有重复更改颜色说明的文本。你在原始文本的顶部写上不同颜色的文本,如下所示:

i=0
while true
do
    echo -en "\r\e[1;3${i}mWelcome to the Matrix\e[0m"
    i=$(((i+1)%8))
    sleep 0.25
done

这将循环显示所有明亮的颜色,每秒改变四次。\r是回车符,它将光标移回行首;echo -n抑制输出末尾的换行符。

这只适用于单行和输出的最后一行。您还可以使用一组不同的转义来进一步移动。\e[3A会将光标向上移动三行,然后您可以再次重写文本:

i=0
while true
do
    echo -e "\e[0;3$(((i+1)%8))mHello!\e[0m"
    echo -e "\e[1;3${i}mWelcome to the Matrix\e[0m"
    i=$(((i+1)%8))
    sleep 0.25
    echo -e "\e[3A"
done

这将以不同的颜色写出两条线,并且两条线都在不断变化。

这些都是ANSI 转义码,而且有很多。如果你经常使用它们,那么像这样的库咒骂可能有帮助。tput也是一个方便的工具,它比使用原始转义码也更便携。如果您使用原始代码,B/C/D 为下/右/左。

对于这些,不可能让不断变化的文本无限期地“坐在那里”。通过将进程放入后台(无论是否&),您可以小心地让一段特定的文本无限期地存在。它可以将光标移动到正确的位置,重写文本,然后将其移回来。您可能会发现有用的一个示例是,具体取决于您的最终目标是什么Bash 提示符 howto 中的“时钟”演示。与一个很多通过工作和协作终端模拟器,您可以获得足够的信息以使文本正常滚动,但这确实不值得。

严格来说,我应该注意到有一个“闪烁”代码,它确实在您所谓的“后端”中运行,我认为从技术上讲是颜色的变化。它的行为就像<blink>标签一样,经常显示和隐藏文本。它并未得到普遍支持:Konsole、xterm、Linux 控制台和 Apple Terminal 确实实现了它,但其他系统通常没有实现。无论如何,它是代码 5。

相关内容