Mon script fait quelque chose comme:
while :;
clear
do_a_lot_of_output_here
sleep 1
done
Y a-t-il des options pour empêcher l'écran de clignoter lorsque je fais de la suppression et de la sortie? Je veux le faire comme dans la watch
commande (mais c'est écrit C
). Des conseils?
clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
PS. J'utilise bash
seulement.
clear | hexdump -C
?echo -en "\ec"
clignote-t-il aussi?Réponses:
Le clignotement se produit car le script efface tout l'écran. S'il peint sur le texte existant et ne s'efface que si nécessaire, alors il n'y aura pas de scintillement.
Voici un exemple:
Il fait ceci:
ed
capacité de votre terminal pour imprimer depuis l'emplacement actuel jusqu'à la fin de l'écran.Si vous souhaitez gérer un écran redimensionnable, vous pouvez déplacer les affectations vers
ROWS
etCOLS
à l'intérieur de la boucle externe, par exemple,car
tput
demande la taille d'écran actuelle du système.Lectures complémentaires:
terminfo
- base de données sur les capacités des terminauxtput
,reset
- initialiser un terminal ou interroger une base de données terminfola source
#!/bin/bash
et souhaitent utiliserwatchit
intégré dans un petit script autonome avec certaines fonctions, vous pouvez le faireexport -f function_name; watchit function_name
.head
). Il semble que le problème soit une erreur ponctuelle (au moins dans ma configuration - session ssh dans les volets fractionnés, iTerm2) lors du calcul du nombre de lignes.ROWS=`expr $(tput lines) - 1`
abordé parfaitement.Une façon d'empêcher le flashage est d'obtenir toute la sortie avant d'effacer l'écran afin qu'il y ait un minimum de temps entre l'effacement et le redessinage. Ceci est similaire au concept de double tampon:
Cela n'élimine pas complètement le scintillement, mais cela se produit beaucoup moins fréquemment selon mon expérience.
la source
clear
dans le tampon, c.-à-doutput=$(clear; do_a_lot_of_output_here)
.Le clignotement est un résultat inévitable de l'effacement de l'écran à chaque fois autour de la boucle. Vous pouvez déplacer le curseur vers le haut de l'écran et remplacer à la place des parties de votre ancienne sortie.
Ce script laissera des artefacts si votre sortie diminue. Il est également peu probable qu'il soit portable. Je ne l'ai testé qu'avec urxvt, xterm et st.
la source
tput clear
avec les mêmes résultats (clignotant)tput ed
. Mais ça fait clignotertput ed
juste avant lado_a_lot...
ligne, je vois clignoter en urxvt mais pas xterm ou st.Dans le prolongement de la réponse de Cristian, j'ai créé la fonction bash suivante qui fonctionne si la fenêtre de la console est plus petite que la sortie de la commande:
Cela vous permet de passer n'importe quelle commande à l'observateur. Si vous utilisez git, utilisez
git config --global color.status always
puis:Affiche une sortie d'état git toujours à jour.
la source