이 명령은 무엇입니까? CSI n ; m H
커서를 n
행과 열로 옮기는 건 알겠 m
는데 제목에 무슨 명령이 있는 걸까요? ^[[H^[[2J
?
답변1
^[
다음은 적어도 xterm과 유사한 터미널(ESC 문자가 표시되는 곳)에서 화면을 지우고 커서를 맨 위에 놓는 시퀀스를 시각적으로 표현한 것입니다.
$ TERM=xterm tput clear | cat -v
^[[H^[[2J
이러한 이스케이프 시퀀스에 대해 알아보려면 다음을 확인하세요.ctlseqs.txt문서에는 다음이 포함되어 있습니다 xterm
.
ESC [
제어 시퀀스 도입자(CSI는 0x9b).
그리고:
CSI Ps; Ps H
커서 위치 [행; 열] (기본값 = [1,1]) (CUP)
그리고:
CSI Ps J 디스플레이 삭제(ED).
Ps = 0 -> 아래 지우기(기본값).
Ps = 1 -> 위 내용을 삭제하세요.
Ps = 2 -> 모두 삭제합니다.
Ps = 3 -> 저장된 줄 삭제(xterm).
(이렇게 하면 ^[[2J
저장된 라인이나 대체 화면이 지워지지 않습니다.)
tput clear
(또는 clear
)은 xterm
유사한 터미널과 동일한 효과를 갖습니다 printf '\e[H\e[2J'
. 이를 위해 데이터베이스에 쿼리하여 이름이 환경 변수에 저장되어 있는 터미널 기능의 문자 순서가 무엇인지 알아냅니다 terminfo
. 덤프 데이터베이스의 터미널 항목을 사용하면 다음이 표시됩니다.clear
$TERM
xterm
terminfo
infocmp xterm
$ infocmp -1 xterm | grep clear
clear=\E[H\E[2J,
주어진 이스케이프 시퀀스를 이해하는 또 다른 방법은 다음과 같습니다.
$ infocmp -L -1 | grep J
clear_screen=\E[H\E[2J,
clr_eos=\E[J,
(함수 이름은 여기서 사용됩니다 L
). 그런 다음 이러한 기능을 설명할 수 있습니다 man 5 terminfo
.
답변2
의 값 n
과 m
기본값은 1 CSIn;mH
이므로 ^[[H
커서가 시작 위치로 이동됩니다. ^[[2J
화면을 지우고 커서를 원래 위치에 둡니다.