Pertama-tama pertanyaan Anda tidak ada hubungannya dengan bash tetapi dengan terminal. Terminal merespons untuk menampilkan teks program dan bash sendiri tidak memiliki kendali atas program begitu diluncurkan.
Terminal menawarkan urutan kontrol untuk mengontrol warna, font, posisi kursor, dan lainnya. Untuk daftar urutan terminal standar, lihat di
http://www.termsys.demon.co.uk/vtansi.htm Anda dapat misalnya
- posisikan kursor di awal baris
- hapus baris setelahnya
- tulis baris baru
untuk membuat bilah kemajuan.
Urutan pelarian terminal yang lebih maju biasanya tergantung terminal, mis. Bekerja hanya dengan Eterm atau xterm. ncurses - adalah pustaka pemrograman yang membuat program interaktif dengan terminal sehingga Anda tidak perlu menggunakan urutan pelarian.
Cara menimpa baris yang ada dengan urutan terminal
echo long text
sleep 1
printf "\033[1A" # move cursor one line up
printf "\033[K" # delete till end of line
echo foo
Cara menimpa saluran yang ada tanpa urutan terminal
Salah satu solusi sederhana adalah tidak menulis baris baru di akhir tetapi menulis carriage return, yang pada dasarnya mengatur ulang kursor ke awal baris, misalnya:
echo -n first
sleep 1
echo -ne "\rsecond"
echo
Pengembalian \r
atau carriage akan meletakkan kursor di awal baris dan memungkinkan Anda untuk menimpa konten baris.
Beralih di antara buffer seperti less
atauvi
Perilaku less
juga karena fitur terminal yang lebih canggih, layar alternatif:
Dalam mode VT102, ada urutan melarikan diri untuk mengaktifkan dan menonaktifkan buffer layar alternatif, yang ukurannya sama dengan area tampilan jendela. Saat diaktifkan, layar saat ini disimpan dan diganti dengan layar alternatif. Menyimpan garis yang digulir dari bagian atas jendela dinonaktifkan hingga layar normal dipulihkan. Entri term cap (5) untuk xterm memungkinkan editor visual vi (1) untuk beralih ke layar alternatif untuk mengedit dan mengembalikan layar saat keluar. Entri menu popup memudahkan beralih antara layar normal dan layar alternatif untuk memotong dan menempel.
http://rosettacode.org/wiki/Terminal_control/Preserve_screen mencantumkan beberapa contoh cara melakukannya sendiri, baik melalui tput atau melalui beberapa urutan pelarian.