Antes de tudo, sua pergunta não tem nada a ver com o bash, mas com o terminal. O terminal está respondendo pela exibição do texto dos programas e o bash em si não tem controle sobre os programas após o lançamento.
Os terminais oferecem seqüências de controle para controlar cor, fonte, posição do cursor e muito mais. Para obter uma lista de seqüências de terminais padronizadas, consulte
http://www.termsys.demon.co.uk/vtansi.htm Você pode, por exemplo,
- posicione o cursor no início da linha
- apague a linha depois
- escreva uma nova linha
para criar uma barra de progresso.
Sequências de escape de terminal mais avançadas geralmente dependem do terminal, por exemplo, funcionam apenas com Eterm ou xterm. ncurses - é uma biblioteca de programação que cria programas interativos com o terminal para que você não precise usar seqüências de escape.
Como sobrescrever uma linha existente com seqüências de terminais
echo long text
sleep 1
printf "\033[1A" # move cursor one line up
printf "\033[K" # delete till end of line
echo foo
Como sobrescrever uma linha existente sem sequência de terminais
Uma solução simples é não escrever uma nova linha no final, mas escrever retorno de carro, que basicamente redefine o cursor para o início da linha, por exemplo:
echo -n first
sleep 1
echo -ne "\rsecond"
echo
O \r
retorno de carro ou colocará o cursor no início da linha e permitirá substituir o conteúdo da linha.
Alterne entre buffers como less
ouvi
O comportamento de less
também é devido a um recurso de terminal mais avançado, a tela alternativa:
No modo VT102, existem seqüências de escape para ativar e desativar um buffer de tela alternativo, que é do mesmo tamanho da área de exibição da janela. Quando ativada, a tela atual é salva e substituída pela tela alternativa. O salvamento das linhas roladas para cima da janela é desativado até que a tela normal seja restaurada. A entrada do termo cap (5) para o xterm permite que o editor visual vi (1) mude para a tela alternativa para edição e restaure a tela na saída. Uma entrada de menu pop-up facilita a alternância entre as telas normal e alternativa para recortar e colar.
http://rosettacode.org/wiki/Terminal_control/Preserve_screen lista alguns exemplos de como fazer você mesmo, seja por tput ou por algumas seqüências de escape.