Mein Skript macht so etwas wie:
while :;
clear
do_a_lot_of_output_here
sleep 1
done
Gibt es Optionen, um zu verhindern, dass der Bildschirm beim Löschen und Ausgeben blinkt? Ich möchte es wie im watch
Befehl machen (aber es ist in geschrieben C
). Irgendwelche Ratschläge?
clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
PS. Ich benutze bash
nur.
clear | hexdump -C
?echo -en "\ec"
blinkt auch?Antworten:
Das Blinken tritt auf, weil das Skript den gesamten Bildschirm löscht. Wenn der vorhandene Text übermalt und nur bei Bedarf gelöscht wird, tritt kein Flackern auf.
Hier ist ein Beispiel:
Es macht das:
ed
Funktion Ihres Terminals, um vom aktuellen Speicherort bis zum Ende des Bildschirms zu drucken.Wenn Sie einen Bildschirm mit veränderbarer Größe bearbeiten möchten, können Sie die Zuweisungen in
ROWS
undCOLS
innerhalb der äußeren Schleife verschieben, z.weil
tput
fragt nach der aktuellen Bildschirmgröße vom System.Weiterführende Literatur:
terminfo
- - Terminalfähigkeitsdatenbanktput
,reset
- Terminal initialisieren oder terminfo-Datenbank abfragenquelle
#!/bin/bash
und verwenden möchtenwatchit
, können Sie dies tunexport -f function_name; watchit function_name
.head
). Das Problem scheint ein Fehler zu sein (zumindest in meinem Setup - SSH-Sitzung in geteilten Fenstern, iTerm2), wenn die Anzahl der Zeilen berechnet wird.ROWS=`expr $(tput lines) - 1`
hat dies perfekt angesprochen.Eine Möglichkeit, ein Blinken zu verhindern, besteht darin, die gesamte Ausgabe vor dem Löschen des Bildschirms abzurufen, sodass zwischen dem Löschen und dem erneuten Zeichnen eine minimale Zeitspanne liegt. Dies ähnelt dem Konzept der doppelten Pufferung:
Dadurch wird das Flimmern nicht vollständig beseitigt, aber meiner Erfahrung nach tritt es deutlich seltener auf.
quelle
clear
in den Puffer aufgenommen wird, doutput=$(clear; do_a_lot_of_output_here)
. H.Das Blinken ist ein unvermeidbares Ergebnis des Löschens des Bildschirms jedes Mal um die Schleife herum. Sie können den Cursor an den oberen Bildschirmrand bewegen und stattdessen Teile Ihrer alten Ausgabe überschreiben.
Dieses Skript hinterlässt Artefakte, wenn Ihre Ausgabe kleiner wird. Es ist auch nicht sehr wahrscheinlich, tragbar zu sein. Ich habe es nur mit urxvt, xterm und st getestet.
quelle
tput clear
mit den gleichen Ergebnissen versucht (blinkend)tput ed
. Aber es verursacht ein Blinkentput ed
rechts vor derdo_a_lot...
Linie, ich sehe in urxvt aber nicht xterm oder st zu blinken.Als Erweiterung von Cristians Antwort habe ich die folgende Bash-Funktion erstellt, die funktioniert, wenn das Konsolenfenster kleiner als die Ausgabe des Befehls ist:
Auf diese Weise können Sie einen beliebigen Befehl an den Beobachter übergeben. Wenn Sie git verwenden, verwenden Sie
git config --global color.status always
und dann:Zeigt eine ständig aktualisierte Ausgabe des Git-Status an.
quelle