En primer lugar, su pregunta no tiene nada que ver con bash sino con el terminal. El terminal está respondiendo para mostrar el texto de los programas y bash no tiene control sobre los programas una vez que se iniciaron.
Los terminales ofrecen secuencias de control para controlar el color, la fuente, la posición del cursor y más. Para obtener una lista de secuencias de terminales estandarizadas, visite
http://www.termsys.demon.co.uk/vtansi.htm . Puede, por ejemplo,
- Posicione el cursor al comienzo de la línea
- borrar la línea después
- escribe una nueva línea
para crear una barra de progreso.
Las secuencias de escape de terminal más avanzadas suelen depender de la terminal, por ejemplo, funcionan solo con Eterm o xterm. ncurses : es una biblioteca de programación que crea programas interactivos con el terminal para que no tenga que usar secuencias de escape.
Cómo sobrescribir una línea existente con secuencias terminales
echo long text
sleep 1
printf "\033[1A" # move cursor one line up
printf "\033[K" # delete till end of line
echo foo
Cómo sobrescribir una línea existente sin secuencia terminal
Una solución simple es no escribir una nueva línea al final, sino escribir el retorno de carro, que básicamente restablece el cursor al comienzo de la línea, por ejemplo:
echo -n first
sleep 1
echo -ne "\rsecond"
echo
El \r
retorno de carro o colocará el cursor al comienzo de la línea y le permitirá sobrescribir el contenido de la línea.
Cambiar entre buffers como less
ovi
El comportamiento de less
también se debe a una función de terminal más avanzada, la pantalla alternativa:
En el modo VT102, hay secuencias de escape para activar y desactivar un búfer de pantalla alternativo, que tiene el mismo tamaño que el área de visualización de la ventana. Cuando se activa, la pantalla actual se guarda y se reemplaza con la pantalla alternativa. El almacenamiento de las líneas desplazadas desde la parte superior de la ventana se desactiva hasta que se restaura la pantalla normal. La entrada term-cap (5) para xterm permite que el editor visual vi (1) cambie a la pantalla alternativa para editar y restaurar la pantalla al salir. Una entrada de menú emergente facilita el cambio entre las pantallas normales y alternativas para cortar y pegar.
http://rosettacode.org/wiki/Terminal_control/Preserve_screen enumera algunos ejemplos de cómo hacerlo usted mismo, ya sea a través de tput o mediante algunas secuencias de escape.