터미널에서 특정 수의 라인을 지우는 방법이 있습니까?


0

사용 사례는 다음과 같습니다.

  1. node.js스크립트 콘솔을 지 웁니다.
  2. 그런 다음 일부 메타 데이터를 콘솔로 보냅니다. ( Module Nametagline . 앱 헤더와 같은 종류입니다.)

  3. 과거 데이터를 콘솔로 보냅니다. (이전부터 발행 후 변경되지 않는 앱의 초기 콘텐츠와 같은 종류입니다. 적어도 종료 할 때까지는 아닙니다.)

  4. 그것은 무엇을해야하는지, 모듈이 무엇을 위해 만들어 졌는지, 콘솔로도 전달합니다.

4 단계는 연속 프로세스입니다. 따라서 4 단계를 시계 처럼 생각할 수 있습니다 . 1 초마다 시계가 재설정되고 새 시간이 표시됩니다.

\033c1-3 단계가 없으면 제대로 작동했을 것입니다. 그러나 그것들은 내가 생각할 수있는 유일한 방법은 모든 데이터를 다시 인쇄하는 것입니다.

작동하지만 가장 성능이 뛰어난 코드는 아닙니다. 따라서 4 단계의 출력을 지우고 변경 사항으로 다시 인쇄 할 수있는 방법이 있습니까?

참고 : 터미널의 마지막 줄이 반드시 프로그램의 마지막 줄인 것은 아닙니다.


모든 터미널은 커서 위치 지정, 라인 삭제 등을 허용하는 제어 코드를 이해합니다. terminfo 데이터베이스에는 이러한 정보가 포함되어 있으며 터미널 유형은 TERM환경 변수에 의해 지정됩니다 . 이를 사용하는 라이브러리는 다음과 같습니다 curses. 그러나 이것은 오래된 기술입니다. node.js에서 어떻게 접근 할 수
있을지 모릅니다

@dirkt 응답에 감사드립니다. 저도 그렇게 생각했습니다. 가능해야합니다. 그러나 불행히도 node.js주위 에 래퍼 가 필요 하거나 내가 실행할 수있는 일종의 bash 명령이 필요합니다 node.
Abhishek Soni

답변:


1

1-3 단계가 없으면 \ 033c가 제대로 작동했을 것입니다.

\033ASCII Escape제어 코드 문자입니다. Escape c터미널을 재설정하는 ANSI 터미널 명령 시퀀스 라고 생각 합니다.

CR(캐리지 리턴)을 발행 하여 커서를 왼쪽 여백으로 이동 한 후 Escape [ K(행 끝까지 지우기) 할 수 있습니다.

4 단계의 출력이 여러 줄인 경우 커서를 행, 열로 이동하고 화면 끝으로 이동하려면 적절한 명령을 실행해야합니다.

"ANSI 터미널 제어 코드"를 검색하면 유용한 참조 자료를 찾아야합니다.

나는 일종의 bash 명령이 필요하다.

man tput

치다

$ echo aaa bbb ccc `tput cr`xxx
xxx bbb ccc

$ echo aaa bbb ccc `tput cr`xxx `tput el`
xxx

또는

$ echo aaa bbb ccc; echo ddd eee fff
aaa bbb ccc
ddd eee fff

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 23 3` ZZZ
aaa bbb ccc
ddd ZZZ fff

또는

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 22 3` ZZZ `tput ed`
aaa ZZZ

사용 된 기능 코드는

  • cr = 캐리지 리턴 (커서 왼쪽 여백).
  • el = 커서에서 줄 끝까지 지 웁니다.
  • cup = 커서 위치.
  • ed = 커서에서 화면 끝까지 지 웁니다.

이 기능 코드는에 나열되어 man terminfo있습니다.

tput이 무엇을하고 있는지 알고 싶다면 다음과 같이 할 수 있습니다.

$ (tput cup 23 3; echo) | cat -v
^[[24;4H

어디 ^[제어 코드 대표 Escape(033 \)를.

이렇게하면 원하는 방식으로 사용할 수있는 가치를 얻을 수 있습니다. \033c

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.