Metoda \ 033 nie zadziałała dla mnie. Metoda \ r działa, ale tak naprawdę niczego nie kasuje, po prostu umieszcza kursor na początku wiersza. Więc jeśli nowy ciąg jest krótszy niż stary, możesz zobaczyć pozostały tekst na końcu linii. Ostatecznie tput był najlepszą drogą. Ma inne zastosowania poza funkcjami kursora, a ponadto jest preinstalowany w wielu dystrybucjach Linuksa i BSD, więc powinien być dostępny dla większości użytkowników basha.
#/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
Oto mały skrypt odliczający do gry:
#!/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
aby uniknąć kolejnego wezwania :-)