Question La manière la plus rapide de réécrire l'écran


J'utilise bash sur Mac OS X et Lubuntu. Une des choses ennuyeuses quand je fais des applications de console est que

clear

va ajouter un entier (nombre x) de lignes à la console. Et puis je réécris l'écran, ce qui prend du temps et est inefficace.

Au lieu de cela, je cherche un moyen de faire en sorte que mon application ne crée pas de lignes supplémentaires et réécrit les caractères actuellement affichés. (comme la commande "top")

Par exemple, mon application doit faire en sorte que le nombre dans le coin supérieur gauche de la console augmente le plus rapidement possible.

Exemple # 1: Utiliser clear

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

Ce serait génial à part ça "scintille", se bloque parfois, gaspille de la place sur la console, et est généralement moche.

Exemple # 2: Utiliser le retour arrière

#!/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

Celui-ci fonctionne comme un charme, ne crée pas de lignes supplémentaires et est rapide, mais il ne peut être exécuté que dans de petites fenêtres.

Exemple # 3: Utilisation de la formule de réécriture utilisée par "top" et "alsamixer".

Comment pourrais-je faire cet exemple?


2
2018-03-29 14:30


origine




Réponses:


Jeter un coup d'œil à ce; en particulier, je recommande le tput Par exemple, puisque cela permet plus ou moins exactement ce que vous avez à l'esprit, et est assez léger dans un script shell - ce qui ne fait pas directement écho aux séquences d'échappement. tput respecte également termcap / terminfo, ce qui aidera à rendre vos scripts plus portables.


5
2018-03-29 14:34



Je suis d'accord. Le débit est la voie à suivre. Vous pouvez vérifier un exemple de tput utilisation ici: wondershell.blogspot.de/2013/01/cpu-usage-graph-in-console.html - mnmnc
@Aaron Miller Tput fonctionne-t-il sur tous les systèmes UNIX? - Blue Ice
tput devrait fonctionner sur tout ce qui interprète les séquences d'échappement ANSI, ce qui devrait couvrir à peu près tous les émulateurs de terminaux que vous trouveriez sur Unix / Linux / & c. système, et beaucoup plus encore. - Aaron Miller


Tu recherches \r, le caractère de retour chariot. Le nouveau texte écrase tout ce qui est à la position du curseur:

#!/bin/bash
for i in `seq 1 1000000`
    do
    echo -e -n "$i\r"
done

2
2018-03-29 14:33