¿Cómo sobrescribir una línea echo/printf con otra? (Haciendo que comience en el centro de la pantalla)

¿Cómo sobrescribir una línea echo/printf con otra? (Haciendo que comience en el centro de la pantalla)

Quiero escribir un guión que genere las oraciones que elijo. Quiero que aparezcan en el centro de la pantalla: muestre el primero y luego haga que el segundo aparezca sobre el primero. Aquí está mi 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!"

Mi intención es sobrescribir la primera línea con la segunda, del mismo modo que telnet towel.blinkenlights.nllo hago al principio de su particular versión de Star Wars. Logré que aparecieran en el centro leyendo otra pregunta, pero me resulta imposible hacer que la segunda línea comience exactamente en la misma línea de la primera. ¿Alguna pista?

Respuesta1

El problema es que tienes un \nen tu primero printf. Eso hace que el cursor se mueva a la siguiente línea, por lo que cuando imprima el nuevo texto no estará en la misma línea para sobrescribir el texto anterior. Si eliminas eso deberías ser bueno:

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"

Arreglé tu observación correcta acerca de que \restaba mal y simplifiqué un poco las matemáticas. Luego agregué un último \npara que el mensaje aparezca en su propia línea al final.

información relacionada