Окрім \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
команди, хоча я не впевнений, як саме це зробити.