Bash maneira mais rápida de reescrever a tela

2

Estou usando o bash no Mac OS X e no Lubuntu. Uma das coisas irritantes sobre quando eu faço aplicativos de console é que

clear

adicionará um todo (número x) de linhas ao console. E então eu reescrevi a tela, o que é demorado e ineficiente.

Em vez disso, estou procurando uma maneira de fazer meu aplicativo não criar linhas extras e reescrever os caracteres exibidos atualmente. (como o comando "top")

Por exemplo, meu aplicativo precisa fazer com que um número no canto superior esquerdo do console suba o mais rápido possível.

Exemplo # 1: usando claro

#!/bin/bash
for i in 'seq 1 1000000'
do
    echo $i
    clear
done

Isso seria ótimo, além de que "pisca", trava às vezes, desperdiça espaço no console e é geralmente feio.

Exemplo # 2: usando backspace

#!/bin/bash
echo -e "3[8;5;10;t"
clear
echo -e -n "0"

for i in 'seq 1 1000000'
    do
    echo -e -n "\b\b\b\b\b\b\b$i"
done

Este funciona como um encanto, não cria linhas extras e é rápido, mas só pode ser executado em pequenas janelas.

Exemplo # 3: usando o tipo de fórmula de reescrita que "top" e "alsamixer" fazem.

Como eu faria este exemplo?

    
por Blue Ice 29.03.2013 / 15:30

2 respostas

5

Dê uma olhada em este ; em particular, eu recomendaria o exemplo tput , uma vez que isso permite mais ou menos exatamente o que você tem em mente, e é bastante leve em um script de shell - o que ecoa diretamente as seqüências de escape não é. tput também respeita termcap / terminfo, o que ajudará a tornar seus scripts mais portáveis.

    
por 29.03.2013 / 15:34
2

Você está procurando \r , o caractere de retorno de carro. Faz com que o novo texto sobrescreva o que estiver na posição do cursor:

#!/bin/bash
for i in 'seq 1 1000000'
    do
    echo -e -n "$i\r"
done
    
por 29.03.2013 / 15:33