Метод \ 033 у мене не спрацював. Метод \ r працює, але насправді нічого не стирає, а просто кладе курсор на початок рядка. Отже, якщо новий рядок коротший за старий, ви можете побачити залишки тексту в кінці рядка. Зрештою tput був найкращим способом піти. Він має інші варіанти використання, крім матеріалів курсору, плюс він попередньо встановлений у багатьох дистрибутивах Linux та BSD, тому він повинен бути доступним для більшості користувачів bash.
#/bin/bash
tput sc # save cursor
printf "Something that I made up for this string"
sleep 1
tput rc;tput el # rc = restore cursor, el = erase to end of line
printf "Another message for testing"
sleep 1
tput rc;tput el
printf "Yet another one"
sleep 1
tput rc;tput el
Ось невеликий сценарій зворотного відліку, з яким можна пограти:
#!/bin/bash
timeout () {
tput sc
time=$1; while [ $time -ge 0 ]; do
tput rc; tput el
printf "$2" $time
((time--))
sleep 1
done
tput rc; tput ed;
}
timeout 10 "Self-destructing in %s"
for i in {1..100000}; do echo -en "\r$i"; done
щоб уникнути наступного дзвінка :-)