콘솔에 추가하지 않고 상위 업데이트 출력과 같은 명령을 어떻게 수행합니까?

콘솔에 추가하지 않고 상위 업데이트 출력과 같은 명령을 어떻게 수행합니까?

PuTTY 터미널 에뮬레이터를 통해 SSH를 사용하여 원격 Linux 서버에 연결합니다. 내가 실행한 명령과 콘솔의 출력이 터미널 창에 계속 추가되는 것을 확인했습니다. 내 말은, 스크롤바를 사용하고 위/아래로 스크롤하면 인쇄된 종이처럼 내가 실행한 이전 명령과 그 출력을 볼 수 있다는 뜻입니다. 그러나 top콘솔에 추가되지 않고 출력을 지속적으로 업데이트하는 것과 같은 일부 명령은 있습니다. 어떻게 작동하나요?

답변1

여기에는 잠재적으로 두 가지 메커니즘이 작용하고 있습니다.

하나는 Martin Prikryl이 답변에서 언급한 대로 ANSI 이스케이프 코드(경우에 따라 기타 ANSI가 아닌 코드)를 사용하여 텍스트 기반 의사 그래픽 인터페이스를 구현하는 것입니다. 이에 대한 최소값은 정확히 두 개의 특정 ANSI 이스케이프 코드입니다. ^[[2J이는 화면의 모든 내용을 지우는 코드이고 ^[[;H, 커서를 화면 왼쪽 상단으로 이동하는 코드입니다. 이를 결합하면 스크롤백 버퍼에 추가하지 않고도 각 '프레임'의 내용을 하나씩 쓸 ​​수 있습니다. 대부분의 애플리케이션은 실제로 그보다 더 많은 것을 사용합니다(예를 들어 커서를 임의의 방향으로 이동하기 위한 코드 세트가 있으며 이를 사용하여 '비어 있어야' 하는 화면 부분을 건너뛰는 것은 매우 일반적입니다). 실제로 대부분의(전부는 아니지만) 대규모 애플리케이션은 libcurses(또는 더 자주는 ncurses) 또는 직접적으로 동등한 것을 사용하여 이 모든 것을 처리합니다.

일반적으로 화면 내용을 조작하기 위해 ANSI 이스케이프 코드를 사용하는 것과 결합되는 다른 가능성은 원래 xterm에서 제공되었지만 현재는 대체 화면 버퍼라고 불리는 대부분의 괜찮은 터미널 에뮬레이터에서 널리 구현되는 특수 기능입니다. 이 버퍼와 일반 스크롤백 버퍼 사이를 전환하는 데 사용되는 한 쌍의 이스케이프 코드( ^[[?1049h및 ) 가 있습니다 . ^[[1049l텍스트 UI를 표시하기 전에 대체 화면 버퍼로 전환함으로써 프로그램은 스크롤백 버퍼 변경을 전혀 피할 수 있습니다. 이는 일반적으로 스크롤되는 키 입력을 가로채지 않고도 스크롤하는 것을 방지할 뿐만 아니라 프로그램이 다음과 같은 작업을 수행할 수 있게 해줍니다. 프로그램이 실행되기 전에 기존 터미널 내용을 검사할 수 있습니다(그리고 전체 화면 응용 프로그램을 열기 전에 수행 중이던 작업을 더 쉽게 확인할 수 있습니다).

답변2

당신이 관찰하는 것은 역사적 발전의 산물입니다.

최초의 대화형 터미널은 신에게 충실했습니다.텔레타이프라이터; 본질적으로 전화선에 연결된 전기 타자기입니다. (왜 /dev/인지 궁금했던 적이 있나요?tty이름이 명명된 대로 명명되었습니까?) 텍스트 명령(iirc, 일부 기본적이고 어색한 줄 편집 포함)을 입력하면 텍스트 출력을 얻을 수 있습니다.

물론 왼쪽에서 오른쪽, 위에서 아래로만 이동할 수 있습니다. 아 잠깐, 사실이 아니야! Ctrl-H를 사용하여 한 문자로 돌아가서 다시 입력하여 굵게 만들 수 있습니다. 보라, 그게 바로 그거야일부 프로그램은 여전히 ​​​​그렇습니다프린터의 텍스트 형식을 지정합니다. 텔레타이프라이터에는 줄 바꿈, 폼 피드 또는 벨과 같은 몇 가지 기본 제어 코드도 있었습니다.

트리를 저장하기 위한 것이라면 CRT 기반 터미널로의 단계는 논리적이었습니다. 그러나 그 이후로 모든 터미널(에뮬레이터)은 텔레타이프라이터의 기본 기능을 제공했습니다. 달리 명시하지 않는 한(유명한 이스케이프 시퀀스 사용) 기본 제어 코드를 포함하여 수신된 7비트 ASCII 코드는 해당 문자 또는 문자로 해석됩니다. 터미널에서 유지 관리하는 현재 커서 위치에서 시작하여 왼쪽에서 오른쪽, 위에서 아래로 명령을 표시하고 표시합니다.

그러나 더 똑똑한 터미널은 실제로 화면의 임의의 행/열 위치에 문자를 표시할 수 있었기 때문에 제어 코드 시퀀스를 통해 프로그래밍 방식으로 이를 수행할 수 있는 수단이 있었고 운영 체제는 적절한 시퀀스를 사용하도록 어떤 방식으로든 구성되었습니다. . 일부 프로그램, 특히 편집기, 쉘 및 top과 같은 기타 대화형 사용자 지향 프로그램은 이 기능을 사용하여 전체 화면을 제어합니다.

이 "시각적 모드"가 더 일반적이지 않은 이유는 "장식" 없이 단순히 선형 문자 시퀀스를 출력하는 것이 엄청나게 다재다능하고 동시에 광범위한 출력에 충분하기 때문입니다. 공백(공백, 탭, 개행)이 포함된 일련의 문자 시퀀스입니다. 파이프와 장치를 갖춘 전체 Unix/Linux 생태계는 이 패러다임을 중심으로 구축되었습니다. find, grep, cut 등과 같은 "빌딩 벽돌"을 함께 연결하고 텍스트 정보를 자동으로 처리할 수 있습니다. 출력이 위치 지정 및 형식 지정 명령과 혼합되면 이는 완전히 불가능합니다.

답변3

대부분의 명령은 단순히 터미널에 줄을 인쇄합니다. 터미널 클라이언트는 기존 라인 프린터와 같은 방식으로 해당 라인을 인쇄합니다. 스크롤백은끝없는 종이프린터에서 나옵니다.

하지만 터미널 클라이언트(일명터미널 에뮬레이터)은 화면 주위로 커서를 이동하여 서버(원격 응용 프로그램)가 "터미널 화면"의 임의 지점에 인쇄하도록 허용하는 등 훨씬 더 많은 작업을 수행할 수 있습니다. 이것이 바로 top, viMidnight Commander 등과 같은 응용 프로그램이 전체 화면 "GUI" 인터페이스(실제로는TUI 인터페이스). 이러한 고급 기능은 다음을 사용하여 구현됩니다.ANSI 이스케이프 코드.

관련 정보