Você não pode imprimir texto com instruções para alterar sua cor repetidamente. Você pode escrever texto com cores diferentes na parte superior do texto original, com algo assim:
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
Isso passará por todas as cores brilhantes, mudando quatro vezes por segundo. \r
é um retorno de carro, que move o cursor de volta para o início da linha; echo -n
suprime a nova linha no final da saída.
Isso só funciona para uma única linha e a última linha de saída. Você também pode usar um conjunto diferente de fugas para se movimentar um pouco mais. \e[3A
moverá o cursor três linhas para cima, e você poderá reescrever o texto novamente:
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
Isso vai escrever duas linhas em cores diferentes, ambas mudando constantemente.
Estes são todos códigos de escape ANSI , e há muitos deles. Se você os usa muito, então uma biblioteca como maldições provavelmente é útil. O tput
também é uma ferramenta útil, que também é mais portátil do que usar códigos de escape não processados. Se você estiver usando os códigos brutos, B / C / D estão para baixo / direita / esquerda.
Não é possível, com isso, alterar o texto apenas "sentar lá" indefinidamente. Você pode ter um texto em particular indefinidamente, com cuidado, colocando o processo em segundo plano (com &
ou de outra forma). Ele pode mover o cursor para o lugar certo, reescrever o texto e, em seguida, movê-lo de volta. Um exemplo que você pode achar útil, dependendo da sua meta final, é a demonstração de "relógio" do Bash perguntar como . Com um lote de trabalho e um emulador de terminal cooperativo, você pode obter informações suficientes para fazer com que o texto role normalmente, mas realmente não vale a pena.
Estritamente, devo observar que há um código "intermitente", que é executado no que você chamou de "backend", e eu suponho que seja tecnicamente uma mudança de cor. Ele se comporta como a tag <blink>
, exibindo e ocultando o texto de vez em quando. Não é universalmente suportado: o Konsole, o xterm, o console do Linux e o Apple Terminal o implementam, mas outros geralmente não o fazem. É o código 5, em qualquer caso.