중복된 질문인 것 같지만 그렇지 않습니다.
"현재" 세션의 스크롤백 버퍼를 지우는 데 사용할 수 있다는 것을 알고 있지만 printf "\033f"
이전 세션에서는 작동하지 않습니다.
내 문제는 XVP 뷰어(VNC 기반 Java 웹 브라우저)를 통해 여러 가상 머신에 액세스하고 로그아웃하기 전에 화면을 지우려고 노력하지 않으면 화면을 스크롤하여 모든 것을 볼 수 있다는 것입니다.
이 오래된 스크롤백 버퍼를 지우는 방법을 제안해 주세요.
추신: 재부팅하면 지워지지만 프로덕션 VM에서는 수행할 수 없습니다.
답변1
Linux 커널은 (적어도 2011년)부터 몇 줄을 건너뛰는 대신 롤백을 지우는 제어 시퀀스를 지원해 왔습니다.
printf '\033[3J'
ncurses 변경 사항에서 언급됨2011년 7월 16일:
+ add E3 extended capability to linux-basic (Miroslav Lichvar)
+ add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD
그리고 설명했다터미널 데이터베이스:
# The 3.0 kernel adds support for clearing scrollback buffer (capability E3).
# It is the same as xterm's erase-saved-lines feature.
linux3.0|linux 3.0 kernels,
E3=\E[3J, use=linux2.6,
이는 1999년 6월 xterm에 추가된 기능이 Linux 콘솔에서 응용 프로그램의 보안을 향상시키는 데 유용하다는 버그 보고서에서 언급되었습니다.
이후에 (에서2013년), (사용된 터미널 설명에 따라) 유틸리티가 롤백을 지울 수 있도록 기능이 유틸리티 E3
에 추가되었습니다 . clear
~에 대한Ctrl+l동일한 이스케이프 시퀀스가 하드코딩되어 있을 수 있는 bash 단축키를 참조합니다(터미널 데이터베이스가 clear
(또는 ed
) 및 E3
기능을 함께 바인딩하지 않기 때문입니다).
추가 자료:
답변2
나는 이것을 수행하는 다른 방법을 찾았습니다. 기본적으로 콘솔 화면에는 510개의 라인 버퍼(제 경우)가 있으므로 echo
511번을 입력하면 해당 라인이 모두 채워지고 이전 데이터가 지워집니다.
echo
루프 내부에서 사용합니다 .for
for i in {0..510}
do
echo
done
이전 bash 프롬프트에서 seq
작동합니다 .
for i in `seq 0 510`
do
echo
done