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

Ama*_*man 6 scripting shell-script echo

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

我知道使用打印彩色文本

echo eg: echo -e "\e[1;34m Hi dude, Welcome to the Matrix \e[0m" 
Run Code Online (Sandbox Code Playgroud)

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

真的有可能吗?

Mic*_*mer 8

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

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
Run Code Online (Sandbox Code Playgroud)

这将循环显示所有明亮的颜色,每秒变化四次。\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
Run Code Online (Sandbox Code Playgroud)

这将用不同的颜色写两行,都在不断变化。

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

这些是不可能让不断变化的文本无限期地“坐在那里”。通过将过程置于后台(&无论是否使用),您可以小心地无限期地保留一段特定的文本。它可以将光标移动到正确的位置,重写文本,然后将其移回。根据您的最终目标,您可能会觉得有用的一个示例是Bash 提示 howto 中的“时钟”演示。通过大量工作和协作终端模拟器,您可以获得足够的信息来使该文本正常滚动,但这确实不值得。

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