Erstellen eines Skripts mit Schleife auf demselben Bildschirm

Erstellen eines Skripts mit Schleife auf demselben Bildschirm

Ich habe ein einfaches Problem mit meinem Skript. Ich brauche ein Zeilenskript auf demselben Bildschirm und die letzten Informationen oben werden nicht angezeigt. Siehe meinen Democode:

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
#result=`sensors -A`
count=0
keypress=''
echo -ne "linha 1\nLinha 2\n " > /tmp/temp_script.log
while [ "x$keypress" = "x" ]; do    
  clear  
  let "count++" 
  output="$(cat /tmp/temp_script.log)"
  printf  "$output"\\b
  echo -en $count\\n
  sleep 1 
keypress="`cat -v`"
done
if [ -t 0 ]; then stty sane; fi
exit 0

Der Ergebniscode:

aktueller Code

Ich muss diese Informationen auf eine Weise anzeigen, die diese mehreren Zeilen des ersten Beispiels nicht erzeugt, und nur die Schleife der betreffenden Informationen anzeigen, wie im zweiten Beispiel:

Wie kann ich das machen:

Mein Ziel

Und so weiter, es werden also nicht die vorherigen Abdrücke der Schleife am Terminal angezeigt, sondern nur das, was jetzt gedruckt wird.

Antwort1

Unter der Annahme, dass dieclearden Bildschirm wirklich löscht, dann wird das angezeigte Skript nicht von sich aus den ersten Screenshot erstellen. Wenn Sie einen zusätzlichen Prozess hätten, der an anfügt /tmp/temp_script.log, dann könnte das etwas bewirken...

Wenn Ihr Terminal den Bildschirm hingegen nicht löscht, ist das ein Teil des Problems. Vielleicht ist diese farbige Linie die Eingabeaufforderung, von der aus Sie das Skript ausgeführt haben, und Sie möchten diese lieber oben auf dem Bildschirm behalten:

  • normalerweise würden Sie TERMeinen geeigneten Wert festlegen, der einer Terminalbeschreibung entspricht.
  • eine „geeignete“ Terminalbeschreibung gibt Auskunft darüber, wie der Bildschirm gelöscht wird.
  • als Nebeneffekt bewegt das Löschen des Bildschirms (gemäß Konvention) den Cursor auch in die obere linke Ecke des Bildschirms, aber
  • Wenn Sie den Bildschirm von der oberen linken Ecke des Bildschirms löschen, wird auch die farbige Linie gelöscht (die Siekönntebehalten wollen)
  • Wenn Sie die zweite Zeile löschen möchten, können Sie (auf den meisten Terminals) Folgendes tun:
    printf '\033[2H\033[J'

oder

    tput Tasse 1 0
    tput ed
  • aber denken Sie daran, dass, wenn Ihre Eingabeaufforderung ursprünglich nicht am oberen Bildschirmrand war, dies einfach alles verlassen würdeWaroben auf dem Bildschirm unberührt.

Der andere Teil des Problems besteht darin, dass die drei Zeilen wiederholt gedruckt werden und den Bildschirm nach unten laufen. Sie können das ändern, indem Sie den Cursor an die Stelle bewegen, an der Sie den Zähler drucken möchten, z. B.

    printf '\033[4H'

oder

    tput Tasse 3 0

Wenn Sie diese zusammenfügen, könnte Ihr Skript folgendermaßen aussehen (und verwenden printf, da etwas mit Ihrer TERMund/oder der Terminalbeschreibung nicht zu stimmen scheint):

    #!/bin/bash

    wenn [ -t 0 ]; dann stty -echo -icanon -icrnl Zeit 0 min 0; fi
    #Ergebnis=`Sensoren -A`
    Anzahl=0
    printf '\033[2H\033[J'
    Tastendruck=''
    Echo „Linie 1“
    Echo „Linie 2
    während [ "x$keypress" = "x" ]; mache    
      lass "zählen++"
      printf '\033[4H'
      echo $Anzahl
      Schlaf 1
      Tastendruck="`cat -v`"
    Erledigt
    wenn [ -t 0 ]; dann stty sane; fi
    Ausfahrt 0

Weiterführende Literatur:

verwandte Informationen