Tôi không thể tạo lại hành vi này ở mọi nơi, nhưng nó xuất hiện trên Ubuntu 18.04
Đó là hướng dẫn để kiểm tra các bãi chứa hex của đầu ra hàng đầu:
$ 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
$
Cụ thể, các chuỗi bắt đầu 0x1b5b3f
là các chuỗi thoát ANSI , có hiệu quả là siêu dữ liệu để kiểm soát những thứ như vị trí con trỏ và màu văn bản.
Cụ thể, về phía bắt đầu của dòng đầu tiên đầu ra, có ESC [?25l
, và về cuối của dòng cuối cùng là ESC [?25h
. Theo trang wikipedia, đây là các mã tương ứng để ẩn và hiển thị con trỏ.
Bằng cách dẫn top -n1
đầu ra đến head
, thiết bị đầu cuối sẽ nhận được lệnh ẩn con trỏ khi bắt đầu, nhưng không phải là lệnh show-con trỏ ở cuối và do đó con trỏ sẽ ẩn đi cho đến khi một số hành động khác bật lại.
@MrShunz đề nghị sử dụng -b
tùy chọn để bật top
ngay. Tùy chọn này vô hiệu hóa tất cả các chuỗi thoát ANSI ở đầu ra trên cùng, thay vào đó chỉ xuất ra văn bản có thể in ASCII đơn giản. Không có con trỏ sẽ bị tổn hại trong quá trình thực thi top
với -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
. ( thông qua )