Bash il modo più veloce per riscrivere la schermata


2

Sto usando bash su Mac OS X e Lubuntu. Una delle cose più fastidiose di quando faccio applicazioni per console è quella

clear

aggiungerà un intero (numero-x) di linee alla console. E poi riscrivo lo schermo, che richiede tempo e inefficienza.

Invece sto cercando un modo per far sì che la mia app non crei linee aggiuntive e riscrivi i caratteri che sono attualmente mostrati. (come il comando "top")

Ad esempio, la mia app deve fare in modo che un numero nell'angolo in alto a sinistra della console salga il più velocemente possibile.

Esempio 1: utilizzo chiaro

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

Sarebbe bello, oltre a ciò, "tremolare", a volte si blocca, spreca spazio console ed è generalmente brutto.

Esempio n. 2: utilizzo di backspace

#!/bin/bash
echo -e "\033[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

Questo funziona come un incantesimo, non crea linee extra ed è veloce, ma può essere eseguito solo in piccole finestre.

Esempio n. 3: uso del tipo di formula di riscrittura che fanno "top" e "alsamixer".

Come farei questo esempio?

Risposte:


5

Dare un'occhiata al Questo ; in particolare consiglierei il tput esempio, poiché ciò consente più o meno esattamente ciò che si ha in mente, ed è abbastanza leggero in uno script di shell - che non fa eco alle sequenze di escape direttamente. tput rispetta anche termcap / terminfo, che contribuirà a rendere gli script più portabili.


Concordo. tput è la strada da percorrere. Puoi controllare un esempio di tput utilizzo qui: wondershell.blogspot.de/2013/01/cpu-usage-graph-in-console.html
mnmnc

@ Aaron Miller Tput funziona su tutti i sistemi simili a UNIX?
Blue Ice

tput dovrebbe funzionare su qualsiasi cosa che interpreti le sequenze di escape ANSI, che dovrebbe coprire quasi tutti gli emulatori di terminale che si trovano su un Unix / Linux / & amp; c. sistema, e molto altro ancora.
Aaron Miller

2

Stai cercando \r, il carattere di ritorno a capo. Fa sì che il nuovo testo sovrascriva ciò che si trova nella posizione del cursore:

#!/bin/bash
for i in `seq 1 1000000`
    do
    echo -e -n "$i\r"
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.