달리는 동안
top -n1 | head
터미널의 커서가 사라집니다. 달리면 top -n1
다시 돌아올 것입니다.
gnome-terminal
tilix
Ubuntu 16.04 및 CentOS 7.5에서 테스트되었습니다 .
이 문제 없이 실행하면 출력 끝 부분에 커서가 다시 나타나게 되는 것 top -n1 | tail
같은데 , 이는 인쇄할 때만 발생하지 않습니다 .top
head
원인은 무엇이며 커서를 보다 적절하게 복원하는 방법은 무엇입니까?
답변1
IMHO, 가장 좋은 방법은 다른 프로그램이나 파일에 대한 파이프와 같은 비대화형 사용 사례에 사용하도록 설계된 top
"배치" 모드(플래그)를 사용하는 것입니다.-b
그래서 이거
top -n1 -b | head
커서 없이는 쉘을 떠나지 않습니다.
에 관해서는커서가 사라진 이유는 무엇입니까?...
top
대화형 프로그램이기 때문에 입력을 받고 항목을 스크롤하는 등의 작업을 수행하기 위해 터미널을 "어수선하게" 만듭니다.숨다커서.
종료되면 호출되기 전에 발견된 커서 및 표시 상태를 복원해야 하며, 하나 이상의제어 코드터미널 자체에.
명령을 파이핑하면 head
이 제어 코드는 실패합니다( head
기본적으로 처음 10줄만 인쇄되고 두 출력 top
및 터미널 상태를 복원하기 위한 제어 코드는 항상 > 10줄입니다).
실제로 head
인쇄하기에 충분한 줄을 제공하면 커서가 나타납니다!
예를 들어,
top -n1 | head -n 100
내 시스템에 커서가 남아 있습니다.
답변2
이 동작을 모든 곳에서 재현할 수는 없지만 Ubuntu 18.04에서는 발생합니다.
최상위 출력의 16진수 덤프를 검사하는 것이 좋습니다.
$ 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
$
특히 시작 순서 0x1b5b3f
는 다음과 같습니다.ANSI 이스케이프 시퀀스, 이는 실제로 커서 위치 및 텍스트 색상과 같은 항목을 제어하는 메타데이터입니다.
특히, 최상위 출력의 첫 번째 줄 시작 부분에 가 있고 ESC [?25l
, 마지막 줄 끝에 가 있습니다 ESC [?25h
. Wikipedia 페이지에 따르면 이는 커서를 숨기고 표시하는 데 해당하는 코드입니다.
top -n1
출력을 로 파이프하면 터미널 head
은 처음에는 hide-cursor 명령을 받지만 마지막에는 show-cursor 명령을 받지 않으므로 다른 작업으로 다시 켤 때까지 커서는 보이지 않는 상태로 유지됩니다.
@MrShunz는 해당 -b
옵션 사용을 제안하는 것이 top
옳습니다 . 이 옵션은 최상위 출력에서 모든 ANSI 이스케이프 시퀀스를 비활성화하고 일반 ASCII 인쇄 가능 텍스트만 출력합니다. 다음을 실행하는 top
동안 커서가 손상되지 않습니다 -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.
$