echo texto colorido que muda de cor dinamicamente

6

Existe alguma maneira que eu possa imprimir um texto colorido no console, que continua mudando suas cores dinamicamente (com ou sem um intervalo de tempo especificado), assim como alguns cartões em que a saudação muda de cor?

Estou ciente de imprimir um texto colorido usando

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

mas desejo que este texto continue mudando de cor.

É realmente possível?

    
por Aman 29.12.2014 / 21:18

1 resposta

8

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.

    
por 29.12.2014 / 21:47