Top top -n1 | head`


11

Koşarken

top -n1 | head

terminalin imleci kaybolur. Koşmak top -n1onu geri getiriyor.

Ubuntu 16.04 ve CentOS 7.5 içinde gnome-terminalve tilixiçinde test edilmiştir .


Çalışırken top -n1 | tailbu sorun yok, bu nedenle, topçıktı sonunda bir şey headsadece yazdırırken yürütülmeyen imlecin yeniden görünmesine izin düşünüyorum .

Buna ne sebep olur ve imleci nasıl daha zarif bir şekilde geri alabilirim?


1
Ayrıca koşarak geri alabilirim tput cnorm. ( via )
pLumo

Yanıtlar:


5

Bu davranışı her yerde yeniden oluşturamadım, ancak Ubuntu 18.04'te ortaya çıkıyor


Üst çıkışın onaltılık dökümünü incelemek öğreticidir:

$ 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
$ 

Özellikle, başlangıç dizileri 0x1b5b3fşunlardır ANSI çıkış dizileri etkili bir imleç pozisyonu ve metin rengi gibi kontrol şeyler meta verilerdir.

Özellikle, üst satırın ilk satırının başlangıcına ESC [?25ldoğru, son satırın sonuna doğru vardır ESC [?25h. Wikipedia sayfasına göre, bunlar imleci gizlemek ve göstermek için ilgili kodlardır.

top -n1Çıkışı boruya bağlayarak, headterminal başlangıçta hide-imleç komutunu alır, ancak sonunda show-imleç komutunu almaz ve bu nedenle imleç başka bir eylem tekrar açılana kadar görünmez kalır.

@MrShunz -bseçeneğini kullanma önerisi topdoğru. Bu seçenek, üst AS çıkışındaki tüm ANSI kaçış dizilerini devre dışı bırakır, bunun yerine yalnızca düz ASCII yazdırılabilir metin üretir. Hiçbir imleçler yürütülürken zarar göreceğini topile -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.
$ 

Harika cevap, teşekkürler. Davranış , imleci printf \\033[?25lgizlemek ve printf \\033[?25hgöstermek için yeniden oluşturulabilir. Diğer kaçış dizileri [Hve [2Jterminali temizle (karşılaştır clear | xxd)
pLumo 19:18

17

IMHO'nun en iyi yolu , başka bir programa veya bir dosyaya aktarma gibi etkileşimli olmayan kullanım durumlarında kullanılması amaçlanan top"toplu" modu ( -bbayrak) kullanmaktır.

Yani, bu

top -n1 -b | head

kabuk imleç olmadan bırakılmayacak.

İmlecin neden kaybolduğuna gelince ...

Yana topinteraktif bir program vb kapmak girişi, kaydırma içeriği için terminali ile, bu "Messes" olduğunu ve gizler imleci.

Sonlandırıldığında, imleci ve çağrılmadan önce bulduğu ekran durumunu geri yüklemelidir ve bunu terminalin kendisine bir veya daha fazla kontrol kodu göndererek yapar .

Komutu ileterek head, bu kontrol kodu geçemez ( headvarsayılan olarak sadece ilk 10 satırı yazdırır topve terminal durumunu geri yüklemek için her ikisinin ve kontrol kodlarının çıkışı her zaman> 10 satırdır).

Aslında, headyazdırmak için yeterli satır verirseniz , imleç görünür!

Örneğin,

top -n1 | head -n 100

sistemime bir imleç bırakıyor.


Cevaplarınız için teşekkürler. -bBenim için kullanmanın yolu.
pLumo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.