Como sobrescrever uma linha echo / printf por outra? (Fazendo isso começar no centro da tela)

0

Eu quero escrever um script que produza sentenças que eu escolher. Eu quero que eles apareçam no centro da tela: mostre o primeiro, e então faça o segundo aparecer sobre o primeiro. Aqui está o 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 é sobrescrever a primeira linha com a segunda, da mesma forma que telnet towel.blinkenlights.nl faz no início de sua versão especial de Star Wars. Consegui fazê-los aparecer no centro lendo outra pergunta, mas acho impossível fazer a segunda linha começar na mesma linha da primeira. Alguma pista?

    
por xvlaze 01.02.2016 / 18:51

1 resposta

0

O problema é que você tem um \n em seu primeiro printf . Isso faz com que o cursor se mova para a próxima linha, então quando você imprime o novo texto não está na mesma linha para sobrescrever o texto antigo. Se você remover isso, você deve ser bom:

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"

Eu consertei sua observação correta sobre o \r estar errado e simplifiquei um pouco a matemática. Então eu adicionei um último \n para colocar o prompt em sua própria linha no final

    
por 01.02.2016 / 19:21