답변1
여기서 주목해야 할 중요한 점은 질문의 레이블입니다. 이 동작은 GNOME 터미널과 libvte에 구축된 기타 터미널 에뮬레이터에만 해당됩니다. Xterm, Unicode RXVT, Linux 커널에 내장된 터미널 에뮬레이터 또는 FreeBSD 콘솔에서는 이 내용을 볼 수 없습니다.
일반적으로 일어나는 일은 이것이다.
- 이
clear
명령은 terminfo/termcap을 보고 적절한 제어 순서를 발행합니다.- terminfo/termcap 항목에
E3
이 기능이 있으면 먼저 기록됩니다. 이는 스크롤백 버퍼를 지우는 제어 시퀀스를 발행합니다. 이것과 그 뒤에 숨겨진 역사는 다음에 자세히 설명되어 있습니다.clear
Dickey는 이 명령에 대한 ncurses 매뉴얼 페이지를 사용합니다.. - 그런 다음
clear
이 기능을 사용하여 보이는 화면을 지웁니다.
- terminfo/termcap 항목에
- terminfo/termcap 항목의 제어 순서는 터미널 유형에 따라 결정됩니다. 그러나 화면을 지우기 위해 FormFeed를 사용하는 터미널을 제외하면(요즘에는 거의 발생하지 않음)(DEC VT 및 그 유사 프로그램에서는 이 작업을 수행하지 않음) 평범한 오래된 ECMA-48 제어 시퀀스이거나 그 확장입니다. 몇 가지 예:
putty
입구E3=\E[3J
Xterm 확장 제어 시퀀스를 정의합니다 .- NetBSD 콘솔
pcvtxx
항목clear=\E[H\E[J
많은 정의 중 하나이거나 이와 유사한 것입니다. 이는 두 가지 일반적인 ECMA-48 제어 시퀀스입니다.
- 터미널 에뮬레이터는 제어 순서에 따라 작동합니다. ECMA-48 및 Xterm 확장의 정의에 따르면:
- CSI
H
(CUP) 커서를 반환합니다. - CSI
0
J
(ED 0) 또는 CSI는J
현재 커서 위치부터 화면 끝까지만 삭제됩니다. - CSI
2
J
(ED 2) 전체 화면을 삭제합니다. - CSI
3
J
(ED 3) 스크롤백 버퍼를 지웁니다.
- CSI
그놈 터미널의 경우:
- 터미널 유형은 올바른
gnome
데 일부 사람들은 이를 잘못 설정했습니다xterm
. - 용어 정보
gnome
항목이 기능은 정의되지 않았E3
으며 많은 시스템에서 그대로 유지됩니다! - 이 항목xterm
은 아직 삭제되지 않았으므로 존재하지 않습니다.Dickey 용어 정보. 그러니 능력의 내용clear
만 쓰세요 .clear
- 이러한 terminfo 항목의 기능적 내용은
clear
커서를 반환한 다음 전체 화면을 지우는 제어 시퀀스입니다. - 그러나 GNOME 터미널은 전체 화면 지우기를 제대로 수행할 수 없습니다. 보다 구체적으로, 기반 라이브러리인 libvte는 코드에서 이 작업을 수행하지 않습니다.그
VteTerminalPrivate::seq_clear_screen()
기능. 대신, libvte는 빈 줄이 있는 전체 화면 아래로 화면을 스크롤하고 커서 위치를 빈 줄 중 첫 번째로 이동합니다.
그렇기 때문에 당신은 당신이 보는 것을 본다. libvte는 지시를 받았을 때 전체 화면을 지우지 않습니다. 대신, 누군가 질문자가 여기서 했던 일을 정확히 수행할 때까지 표면적으로 이와 유사한 작업을 수행합니다. 즉, 터미널 창을 뒤로 스크롤하여 뒤로 스크롤 버퍼를 확인합니다. 그렇다면 차이점은 분명합니다.
Xterm 및 Unicode RXVT와 같은 다른 터미널 에뮬레이터에서 ED 2 제어 시퀀스는 화면을 위에서 아래로 화면의 모든 위치를 지우고 스크롤백 버퍼를 변경하지 않습니다. 그러나 libvte 터미널 에뮬레이터에서는 현재 화면을 스크롤백 버퍼에 푸시하고 화면의 빈 줄을 추가합니다. 이전 화면 내용은 삭제되지 않고 스크롤백 버퍼로 이동됩니다.
명령 을 두 번 실행하면 clear
추가됩니다.둘화면에 빈 줄이 나타납니다. 스크롤백 버퍼가 충분히 크면 다음을 수행할 수 있습니다.아직원래 화면 콘텐츠를 찾으려면 스크롤백 버퍼를 자세히 살펴보세요.
추가 읽기
- 문자 세트 인코딩을 위한 제어 기능ECMA-48.
- 게오르기 키릴로프(2007-12-30).Ctrl-L은 스크롤백 버퍼에 공백을 추가합니다.. 그놈 버그 #506438.
- xterm, xterm-color 및 VT100 기반 Linux 터미널 에뮬레이터는 어느 정도까지입니까?
- "이전" 스크롤백 버퍼 지우기
- Bash Clear 명령의 이상한 동작으로 인해 스크롤백 버퍼가 삭제됩니다.
- https://superuser.com/questions/1094599/
- 디키, 토마스 (2018). "XTerm 및 유사한 프로그램의 알려진 버그: GNOME 터미널". XTerm FAQ. Invisibleisland.net.
- 디키, 토마스 (2018). "XTerm 및 유사 항목의 알려진 버그: VTE 주석". XTerm FAQ. Invisibleisland.net.
답변2
터미널을 지우고 전체 출력 버퍼를 파괴하려면 다음을 수행하는 것이 좋습니다 tput reset
. 예를 들어 이전 프로그램이 충돌하여 터미널을 깨끗하지 않은 상태로 남겨둔 경우 터미널이 확실히 지워지고 상태가 보너스로 수정됩니다. 또한 tput
올바른 터미널 유형을 결정할 수 있을 만큼 똑똑해야 하므로 터미널이 VT100 또는 기타 명령 시퀀스를 사용하는지 여부를 알 필요가 없습니다.
POSIX에서 정의한 대로 tput reset
모든 POSIX 호환 시스템에서도 작동해야 합니다.https://pubs.opengroup.org/onlinepubs/007904975/utilities/tput.html