Как перезаписать строку echo/printf другой? (Заставив ее начинаться в центре экрана)

Как перезаписать строку echo/printf другой? (Заставив ее начинаться в центре экрана)

Я хочу написать скрипт, который выводит выбранные мной предложения. Я хочу, чтобы они появлялись в центре экрана: вывести первое, а затем заставить второе появиться над первым. Вот мой код:

    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!"

Я намерен перезаписать первую строку второй, так же, как telnet towel.blinkenlights.nlэто делается в начале их конкретной версии Звездных войн. Мне удалось заставить их появиться в центре, прочитав другой вопрос, но я не могу заставить вторую строку начинаться с той же строки, что и первая. Есть какие-нибудь подсказки?

решение1

Проблема в том, что у вас есть \nв первом printf. Это заставляет курсор перемещаться на следующую строку, поэтому когда вы печатаете новый текст, он не находится на той же строке, чтобы перезаписывать старый текст. Если вы удалите это, все должно быть хорошо:

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"

Я исправил ваше правильное замечание о том, \rчто это неправильно, и немного упростил математику. Затем я добавил последний, \nчтобы подсказка была на отдельной строке в конце

Связанный контент