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

    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 ответ1

0

Проблема в том, что у вас есть \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 чтобы получить подсказку на отдельной строке в конце

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .