В дополнение к \r
или \b
подходам можно использовать \033[2K
управляющий символ , который сообщает терминалу очистить всю строку. Преимущество этого по сравнению с тем \b
, что вам не нужно сопоставлять количество \b
с количеством символов, которые вы хотите удалить, и по сравнению с тем, \r
что на экране не будет выпуклых символов, если новая строка короче старой один.
Ниже приведен пример того, как его можно применить к этому вопросу, а вот пример соответствующего приложения для создания вывода, аналогичного загрузочным сообщениям. В этом конкретном примере таймер исчезнет, когда будет достигнута 0-я секунда, и строка таймера будет заменена на «Готово!» фраза.
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
printf "One moment please: %d" "$sek"
sleep 1
printf "\r%b" "\033[2K"
done
echo "Ready!"
Другой альтернативой будет использование dialog
команды для создания простых диалогов в командной строке. Диалог будет оставаться на экране в течение всего времени таймера и обновляться с помощью цикла, а к тому времени, когда он будет сделан, таймер будет заменен на сообщение «Готово! Нажмите для выхода» без проблем:
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
echo "$sek" | dialog --progressbox "Please wait" 10 25
sleep 1
done
dialog --msgbox "Ready! Press <OK> to finish" 10 25
watch
команды, хотя я точно не знаю, как это сделать.