Non sono stato in grado di ricreare questo comportamento ovunque, ma si presenta su Ubuntu 18.04
È istruttivo esaminare i dump esadecimali dell'output superiore:
$ top -n1 | head -n1 | xxd
00000000: 1b5b 3f31 681b 3d1b 5b3f 3235 6c1b 5b48 .[?1h.=.[?25l.[H
00000010: 1b5b 324a 1b28 421b 5b6d 746f 7020 2d20 .[2J.(B.[mtop -
00000020: 3133 3a34 333a 3034 2075 7020 3120 6d69 13:43:04 up 1 mi
00000030: 6e2c 2020 3120 7573 6572 2c20 206c 6f61 n, 1 user, loa
00000040: 6420 6176 6572 6167 653a 2030 2e38 312c d average: 0.81,
00000050: 2030 2e35 342c 2030 2e32 321b 2842 1b5b 0.54, 0.22.(B.[
00000060: 6d1b 5b33 393b 3439 6d1b 2842 1b5b 6d1b m.[39;49m.(B.[m.
00000070: 5b33 393b 3439 6d1b 5b4b 0a [39;49m.[K.
$ top -n1 | tail -n1 | xxd
00000000: 1b5b 3f31 326c 1b5b 3f32 3568 1b5b 4b .[?12l.[?25h.[K
$
In particolare, le sequenze che iniziano 0x1b5b3f
sono sequenze di escape ANSI , che in realtà sono metadati per controllare cose come la posizione del cursore e il colore del testo.
In particolare, verso l'inizio della prima riga dell'output superiore, c'è ESC [?25l
, e verso la fine dell'ultima riga è ESC [?25h
. Come per la pagina di Wikipedia, questi sono i rispettivi codici per nascondere e mostrare il cursore.
Effettuando il piping top -n1
dell'output a head
, il terminale riceverà il comando nascondi cursore all'inizio, ma non il comando mostra cursore alla fine, e quindi il cursore rimarrà invisibile fino a quando qualche altra azione non lo riattiverà nuovamente.
Il suggerimento di @MrShunz di usare l' -b
opzione per top
è giusto. Questa opzione disabilita tutte le sequenze di escape ANSI nell'output di top, invece emette semplicemente testo stampabile ASCII semplice. Nessun cursore verrà danneggiato durante l'esecuzione di top
con -b
:
$ top -b -n1 | head -n1 | xxd
00000000: 746f 7020 2d20 3133 3a35 393a 3236 2075 top - 13:59:26 u
00000010: 7020 3138 206d 696e 2c20 2031 2075 7365 p 18 min, 1 use
00000020: 722c 2020 6c6f 6164 2061 7665 7261 6765 r, load average
00000030: 3a20 302e 3134 2c20 302e 3036 2c20 302e : 0.14, 0.06, 0.
00000040: 3037 0a 07.
$
tput cnorm
. ( via )