Zuallererst hat Ihre Frage nichts mit Bash zu tun, sondern mit dem Terminal. Das Terminal antwortet auf die Anzeige des Textes der Programme und die Bash selbst hat nach dem Start keine Kontrolle über die Programme.
Terminals bieten Steuersequenzen zur Steuerung von Farbe, Schriftart, Cursorposition und mehr. Eine Liste der standardisierten Terminalsequenzen finden
Sie beispielsweise unter http://www.termsys.demon.co.uk/vtansi.htm
- positionieren Sie den Cursor an den Zeilenanfang
- lösche die Zeile danach
- schreibe eine neue Zeile
um einen Fortschrittsbalken zu erstellen.
Fortgeschrittenere Terminal-Escape-Sequenzen sind typischerweise terminalabhängig, zB arbeiten sie nur mit Eterm oder xterm. ncurses - ist eine Programmierbibliothek, mit der Sie interaktive Programme mit dem Terminal erstellen können, sodass Sie keine Escape-Sequenzen verwenden müssen.
So überschreiben Sie eine vorhandene Zeile mit terminalen Sequenzen
echo long text
sleep 1
printf "\033[1A" # move cursor one line up
printf "\033[K" # delete till end of line
echo foo
So überschreiben Sie eine bestehende Zeile ohne Klemmenfolge
Eine einfache Lösung besteht darin, am Ende keine neue Zeile, sondern einen Wagenrücklauf zu schreiben, der den Cursor im Grunde genommen an den Zeilenanfang zurücksetzt, z.
echo -n first
sleep 1
echo -ne "\rsecond"
echo
Der \r
Zeilenumbruch oder der Zeilenumbruch setzen den Cursor an den Anfang der Zeile und ermöglichen es Ihnen, den Inhalt der Zeile zu überschreiben.
Zwischen Puffern wie less
oder wechselnvi
Das Verhalten von less
ist auch auf eine erweiterte Terminalfunktion zurückzuführen, den alternativen Bildschirm:
Im VT102-Modus gibt es Escape-Sequenzen zum Aktivieren und Deaktivieren eines alternativen Bildschirmpuffers, der dieselbe Größe wie der Anzeigebereich des Fensters hat. Bei Aktivierung wird der aktuelle Bildschirm gespeichert und durch den alternativen Bildschirm ersetzt. Das Speichern von Zeilen, die vom oberen Rand des Fensters gescrollt wurden, ist deaktiviert, bis der normale Bildschirm wiederhergestellt ist. Der Eintrag termcap (5) für xterm ermöglicht es dem visuellen Editor vi (1), zum Bearbeiten zum alternativen Bildschirm zu wechseln und den Bildschirm beim Beenden wiederherzustellen. Ein Popup-Menüeintrag erleichtert das Umschalten zwischen dem normalen und dem alternativen Bildschirm zum Ausschneiden und Einfügen.
http://rosettacode.org/wiki/Terminal_control/Preserve_screen listet einige Beispiele auf, wie Sie dies selbst tun können, entweder über tput oder über einige Escape-Sequenzen.