Como substituir uma linha echo/printf por outra? (Fazendo com que comece no centro da tela)

Como substituir uma linha echo/printf por outra? (Fazendo com que comece no centro da tela)

Quero escrever um script que produza frases que eu escolher. Quero que eles apareçam no centro da tela: imprima o primeiro e depois faça o segundo aparecer sobre o primeiro. Aqui está meu código:

    COLUMNS=$(tput cols) 

printf "%*s\n" $((($COLUMNS)/2)) "Hey, welcome to my script!" "%\r"
sleep 2
printf "%*s" $((($COLUMNS)/2)) "This is a new line!"

Minha intenção é substituir a primeira linha pela segunda, da mesma forma que telnet towel.blinkenlights.nlfaz no início de sua versão particular de Star Wars. Consegui fazê-los aparecer no centro lendo outra pergunta, mas acho impossível fazer a segunda linha começar exatamente na mesma linha da primeira. Alguma pista?

Responder1

O problema é que você tem um \nno seu primeiro arquivo printf. Isso faz com que o cursor se mova para a próxima linha, de modo que quando você imprimir o novo texto ele não fique na mesma linha para substituir o texto antigo. Se você remover isso, você deve ficar bem:

COLUMNS=$(tput cols) 

printf "%*s\r" $((COLUMNS/2)) "Hey, welcome to my script!"
sleep 2
printf "%*s" $((COLUMNS/2)) "This is a new line!"
printf "\n"

Corrigi sua observação correta sobre \restar errado e simplifiquei um pouco a matemática. Então adicionei um last \npara colocar o prompt em sua própria linha no final

informação relacionada