2 votes

Existe-t-il un moyen d'effacer un nombre spécifique de lignes dans un terminal ?

Voici le cas d'utilisation :

  1. A node.js script efface la console.

  2. Puis il envoie des métadonnées à la console. ( Nom du module y slogan . Un peu comme l'en-tête d'une application).

  3. Il envoie les données passées à la console. (Un peu comme le contenu initial d'une application qui, étant donné qu'il est passé, ne changera pas après son émission. Du moins, pas jusqu'à la sortie).

  4. Il fait ce qu'il est censé faire, ce pour quoi le module a été conçu, et il le transmet également à la console.

L'étape 4 est un processus continu. Et donc vous pouvez penser à l'étape 4 comme si c'était un horloge . Après chaque seconde, l'horloge se remet à zéro et affiche la nouvelle heure.

\033c aurait bien fonctionné si les étapes 1 à 3 n'étaient pas là. Mais elles le sont, et la seule solution à laquelle je pense est de réimprimer toutes les données.

Cela fonctionne, mais ce n'est pas le code le plus performant. Alors, y a-t-il un moyen d'effacer la sortie de l'étape 4, puis de la réimprimer avec les changements ?

Note : La dernière ligne du terminal n'est pas nécessairement la dernière ligne du programme.

2voto

RedGrittyBrick Points 78148

\033c aurait bien fonctionné si les étapes 1 à 3 n'étaient pas là.

\033 est l'ASCII Escape caractère de code de contrôle. Je crois Escape c est la séquence de commande du terminal ANSI pour réinitialiser le terminal.

Vous pouvez probablement émettre un CR (retour chariot) pour déplacer le curseur vers la marge gauche, suivi de Escape [ K (clair jusqu'à la fin de la ligne).

Si la sortie de l'étape 4 est constituée de plusieurs lignes, vous devez émettre les commandes appropriées pour déplacer le curseur sur une ligne, une colonne et effacer jusqu'à la fin de l'écran.

Une recherche sur "ANSI terminal control codes" devrait permettre de trouver des documents de référence utiles.

J'ai besoin ... d'une sorte de commande bash.

man tput

envisager

$ echo aaa bbb ccc `tput cr`xxx
xxx bbb ccc

$ echo aaa bbb ccc `tput cr`xxx `tput el`
xxx

o

$ echo aaa bbb ccc; echo ddd eee fff
aaa bbb ccc
ddd eee fff

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 23 3` ZZZ
aaa bbb ccc
ddd ZZZ fff

o

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 22 3` ZZZ `tput ed`
aaa ZZZ

où les codes de capacité utilisés sont

  • cr = retour chariot (curseur vers la marge gauche).
  • el = effacer du curseur à la fin de la ligne.
  • cup = positionnement du curseur.
  • ed = effacer du curseur à la fin de l'écran.

Ces codes de capacité sont énumérés dans man terminfo .

Si vous voulez savoir ce que fait tput, vous pouvez faire quelque chose comme

$ (tput cup 23 3; echo) | cat -v
^[[24;4H

^[ représente le code de contrôle Escape ( \033 ).

Vous obtiendrez ainsi des valeurs que vous pourrez utiliser de la manière dont vous aviez l'intention d'utiliser votre carte de crédit. \033c

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X