Em primeiro lugar, a sua pergunta não tem nada a ver com o bash, mas com o terminal. O terminal está respondendo por exibir o texto dos programas e o próprio bash não tem controle sobre os programas depois que eles são lançados.
Terminais oferecem sequências de controle para controlar cor, fonte, posição do cursor e mais. Para uma lista de seqüências de terminais padronizadas, veja link Você pode, por exemplo,
- posicione o cursor no início da linha
- exclua a linha depois
- escreva uma nova linha
para criar uma barra de progresso.
Sequências de escape de terminal mais avançadas são tipicamente terminais dependente, e. trabalhe apenas com Eterm ou xterm. ncurses - é uma biblioteca de programação que para crie programas interativos com o terminal para que você não precise usar sequências de escape.
Como sobrescrever uma linha existente com sequências de terminal
echo long text
sleep 1
printf "3[1A" # move cursor one line up
printf "3[K" # delete till end of line
echo foo
Como sobrescrever uma linha existente sem seqüência de terminal
Uma solução simples é não escrever uma nova linha no final, mas escrever o 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
ou o retorno de carro colocará o cursor no início da linha e permitirá que você sobrescreva o conteúdo da linha.
Alternar entre buffers como less
ou vi
O comportamento de less
também é devido a um recurso de terminal mais avançado, o
tela alternativa:
In VT102 mode, there are escape sequences to activate and deactivate an alternate screen buffer, which is the same size as the display area of the window. When activated, the current screen is saved and replaced with the alternate screen. Saving of lines scrolled off the top of the window is disabled until the normal screen is restored. The term‐ cap(5) entry for xterm allows the visual editor vi(1) to switch to the alternate screen for editing and to restore the screen on exit. A popup menu entry makes it simple to switch between the normal and alternate screens for cut and paste.
link lista alguns exemplos de como fazer você mesmo, seja através de tput ou por meio de alguma fuga seqüências.