사람을 종료 한 후에도 여전히 '사람'텍스트를 볼 수 있습니까?


16

나는 일반적으로 tcsh 또는 bash를 사용하고 종종 'man'을 사용하여 명령 옵션을 검토하려고합니다. 현재 man 또는 ctrl-C를 종료하면 man 텍스트가 사라지고 'man'명령을 수행하기 전에 있던 스크롤 백 버퍼가 나타납니다. 두 번째 창을 열지 않고 명령 프롬프트에 명령을 입력하는 동안 참조로보고있는 'man'텍스트를 계속보고 싶습니다. 어떻게 할 수 있습니까?

답변:


17

이 동작은 일부 (하드웨어) 터미널과 대부분의 (소프트웨어) 터미널 에뮬레이터에 포함 된 "대체 화면"기능에서 비롯됩니다. 어떤 터미널 인식 프로그램은 작업을 수행하기 위해 대체 '화면'으로 전환하고 종료 될 때 (종료, 일시 중단 등) 일반 '화면'으로 다시 전환됩니다. 이것은 그러한 프로그램의 최종 결과물을 효과적으로 제거합니다.

"terminfo prevent altscreen"에 대한 웹 검색 은 대체 화면 '문제'와 몇 가지 솔루션을 설명하는 페이지를 제공 했습니다 .

링크 된 페이지에서 설명한 것처럼 일부 프로그램은 대체 화면을 사용하지 않도록 구성 할 수 있습니다. -X에 대한 옵션 이하 이 일을 간접적 인 방법입니다. t_tit_te변수를 설정 해제하여 Vim을 유사하게 구성 할 수 있습니다 .


더 넓은 범위의 솔루션 은 대체 화면 제어 순서가 포함되지 않도록 터미널 의 terminfo 항목 을 편집 하는 것입니다. terminfo 항목은 특정 효과 (커서 이동, 화면 지우기, 현재 행의 일부 지우기 등)를 생성하기 위해 터미널에 전송할 시퀀스를 제어하는 ​​프로그램을 알려주는 데이터베이스를 구성합니다. 터미널에서 사용하는 terminfo 항목을 편집하면 "alternate screen"제어 시퀀스도 존재한다는 것을 모든 terminfo 사용 프로그램에 '말하지 않도록'설정할 수 있습니다.

에서 의 제어 시퀀스 목록 의 xterm , 우리는 (에 대한 관심의 제어 시퀀스 것을 알 수 있습니다 xterm이 터미널 에뮬레이터 -like)이 있습니다

  • 대체 화면 활성화 : ESC [ ? 47 h(1047 및 1049와 동일)
  • 일반 화면 복원 : ESC [ ? 47 l(1047 및 1049와 동일).

이러한 코드는 terminfo 변수 smcup및 에있을 가능성이 높습니다 rmcup. 현재 TERM에 대해 이러한 변수를 소비하는 빠르고 더러운 방법은 다음과 같습니다.

infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo

이 방법은 매우 조잡하며 모든 터미널에서 작동하지는 않지만 대부분의 xterm 유사 터미널 에뮬레이터에서는 작동합니다. 터미널에 대한 terminfo 항목의 변수 smcuprmcup변수 값을 조사 하고 원하지 않는 동작을 방지하기 위해 보수적으로 편집해야합니다. 위에 링크 된 토론 / 솔루션 페이지에는 자신을 해킹하는 대신 사용할 수있는 "사전 조리 된"terminfo 파일이 있습니다 (그러나 그 재미는 무엇입니까?).



9

호출기가가 있다고 가정하면 less환경 변수 LESS를 "X"를 포함하도록 설정하십시오 . 예를 들어 광산은 다음과 같습니다.

LESS="-iMFXRj4a"

~/.bashrc파일 에서 이것을 설정할 수 있습니다

export LESS="-X"

alrady에있는 다른 옵션을 포함 시키거나 원하는 옵션을 추가하십시오.


4

다른 답변보다 우아하지 않은 또 다른 트릭은 다음과 같습니다.

man what | more

(적어도 이것은 MacOS X에서 작동하며 일반적으로 유효 할 정도로 유사합니다.)


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