有什么方法可以在控制台上打印彩色文本,该文本不断动态地改变其颜色(有或没有指定的时间间隔),就像一些问候语改变颜色的贺卡一样?
我知道使用打印彩色文本
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。