Beim Laufen
top -n1 | head
Der Cursor des Terminals verschwindet. Laufen top -n1
bringt es zurück.
Getestet in gnome-terminal
und tilix
in Ubuntu 16.04 und CentOS 7.5.
Beim Ausführen top -n1 | tail
tritt dieses Problem nicht auf. Ich denke, am Ende der top
Ausgabe wird der Cursor erneut angezeigt, was beim Drucken des Cursors nicht ausgeführt wird head
.
Was verursacht dies und wie kann ich den Cursor eleganter zurückstellen?
terminal
gnome-terminal
top
cursor
pLumo
quelle
quelle
tput cnorm
. ( via )Antworten:
Ich konnte dieses Verhalten nicht überall neu erstellen, aber es wird unter Ubuntu 18.04 angezeigt
Es ist lehrreich, Hex-Dumps der Top-Ausgabe zu untersuchen:
Insbesondere sind die Sequenzen ausgehend
0x1b5b3f
sind ANSI - Escape - Sequenzen , die effektiv Meta-Daten zu Steuer Dinge wie Cursorposition und Textfarbe sind.Insbesondere gibt es gegen den Anfang der ersten Zeile der obersten Ausgabe
ESC [?25l
und gegen Ende der letzten ZeileESC [?25h
. Laut Wikipedia-Seite sind dies die entsprechenden Codes zum Ausblenden und Anzeigen des Cursors.Durch Weiterleiten der
top -n1
Ausgabe anhead
erhält das Terminal zu Beginn den Befehl zum Verstecken des Cursors, am Ende jedoch nicht den Befehl zum Anzeigen des Cursors. Daher bleibt der Cursor unsichtbar, bis eine andere Aktion ihn wieder einschaltet.@ MrShunz Vorschlag, die
-b
Option zu verwenden,top
ist richtig. Diese Option deaktiviert alle ANSI-Escape-Sequenzen in der Ausgabe von top und gibt stattdessen nur druckbaren ASCII-Text aus. Während der Ausführung vontop
with werden keine Cursor verletzt-b
:quelle
printf \\033[?25l
auszublenden undprintf \\033[?25h
wieder anzuzeigen. Die anderen Escape-Sequenzen[H
und[2J
löschen Sie das Terminal (vergleicheclear | xxd
)IMHO ist es am besten, den
top
"Batch" -Modus (-b
Flag) zu verwenden, der für nicht interaktive Anwendungsfälle wie das Weiterleiten an ein anderes Programm oder eine Datei verwendet werden soll.Also das
verlässt die Shell nicht ohne Cursor.
Wie für die , warum verschwindet der Cursor ...
Da
top
es sich um ein interaktives Programm handelt, "verwirrt" es das Terminal, um Eingaben zu erfassen, Inhalte zu scrollen usw., und es versteckt den Cursor.Beim Beenden muss der Cursor und der angezeigte Anzeigestatus wiederhergestellt werden, bevor er aufgerufen wird. Dazu werden ein oder mehrere Steuercodes an das Terminal selbst gesendet.
Durch Weiterleiten des Befehls
head
kommt dieser Steuercode nicht durch (head
druckt standardmäßig nur die ersten 10 Zeilen, und die Ausgabe von beidentop
und den Steuercodes zum Wiederherstellen des Terminalstatus beträgt immer> 10 Zeilen).Wenn Sie
head
genügend Zeilen zum Drucken angeben, wird der Cursor angezeigt!Beispielsweise,
hinterlässt einen Cursor auf meinem System.
quelle
-b
ist der Weg für mich.