Метод \ 033 у меня не сработал. Метод \ r работает, но на самом деле ничего не стирает, а просто помещает курсор в начало строки. Итак, если новая строка короче старой, вы можете увидеть оставшийся текст в конце строки. В конце концов, путь был лучшим выходом. У него есть и другие варианты использования, помимо курсора, плюс он предустановлен во многих дистрибутивах 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
чтобы избежать вызова seq :-)