종료 한 후 사람에게서 읽은 내용을 어떻게 유지할 수 있습니까?


24

그래서 우리 man whateverwhatever명령 과 관련된 사용법과 다른 정보를 얻는 데 사용합니다. 정보 의 관련 섹션이 발견되면 man화면에 정보가 남은 상태에서 명령 을 종료하고 싶습니다 . 위의 심판과 함께 다음 명령을 입력 할 수 있습니다. 그러나 man명령은 전체 화면을 종료하여와 유사한 이전 화면을 복구합니다 vim. 이것을 달성 할 수있는 방법이 있습니까?



모든 제안은 훌륭하지만 두 번째 창을 열어서 맨 페이지를 볼 수도 있습니다. GUI 매뉴얼 페이지 뷰어도있을 것입니다.
Barmar

답변:


38

나는 이것이 man그 자체가 아니라 PAGER사용중인 터미널과 결합 된 호출기 ( 환경 변수) 에 관한 것이 아니라고 생각 합니다.

나는 당신의 호출기가 아마 추측 less (현재 일반적인 기본 호출기이며 설명에 적합 함) .

less-X찾고있는 내용에 따라 행동을 취할 수 있는 옵션 이 있습니다.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

예를 들어 PAGER="less -X" man man테스트에 사용할 수 있으며이 동작을 선호 PAGER하는 경우이 값을 영구적으로 설정 하는 것이 좋습니다 .


불행히도 스크롤 기록을 엉망으로 만듭니다.
musiKk

@musiKk 스마트 유니 코드 터미널 (리눅스 콘솔 아님)과 man 2.7.5
cat

3
@musiKk : 호출기를 종료 한 후 매뉴얼 페이지를 뒤로 스크롤하려면 일반적인 랜덤 액세스가 아니라 매뉴얼 페이지에서 행 또는 페이지로 스크롤하도록 제한해야합니다.
Peter Cordes 2016 년

1
또는 LESS=-X변경을 피하기 PAGER
위해을

11

호출기보다 적게 실행하는 경우 (매우 일반적 임) 호출기 수정을 처리 할 필요가 없으며 I / O 리디렉션 만 수행하면됩니다.

man <whatever you want to man> | cat -

그러면 터미널에 사본이 인쇄되므로 필요할 때 위로 스크롤 할 수 있습니다.


1
이 방법의 한 가지 문제점은 긴 수동 페이지의 경우 관심있는 부분으로 다시 스크롤하기 어려울 수 있으며 해당 부분과 현재 명령 행이 모두 표시되지 않는다는 것입니다.
jlliagre 2016 년

다른 제안 사항으로는이 문제를 극복 할 수 없습니다. 단일 콘솔 창에 내재되어 있습니다. 그러나 그것으로 당신은 항상 당신의 명령을 쓰고, 약간 위로 스크롤하고, 스크롤을 절반으로 쓴 명령으로 되돌릴 수 있습니다.
Brennen Smith

내 제안은 분명히이 문제를 극복했습니다. 관심있는 매뉴얼 페이지가 화면에 있으면 man 명령을 그대로두고 해당 페이지를 같은 화면에 계속 표시하여 명령을 입력 할 수 있습니다.
jlliagre 2016 년

2
-표준을 의미하지만 cat어쨌든 가정
loa_in_

1
그것은 주로 시맨틱을위한 것입니다-나는 항상 stdin을 명시 적으로 좋아합니다.
Brennen Smith

5

뿐만 아니라로서 less만 같은 다른 텍스트 응용 프로그램vim 전시 같은 매우 성가신 기능, 나는 단지에서 관련 명령을 지원하는 단말기의 기능을 제거하고 일을 terminfo데이터베이스를.

이 명령은 smcuprmcup 이며 cup명령 (커서 ​​위치)이 허용 된 위치 에서 스위치를 켜고 이동할 수 있도록 설계되었습니다 .

다음은 작업을 자동화하는 데 사용한 쉘 기능입니다. 적어도 Solaris 및 대부분의 Linux 배포판에서 작동합니다.

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

터미널 항목이로 대체되지 않으면 스크립트에서 올바른 터미널 이름으로 xterm바꿔야 xterm합니다.


1
그래, 그러나 이것은 다른 프로그램들을 깨뜨릴 수있다. (pagers 나 curses가 아니라 readline-like editors 등)
cat

1
@cat 기존 항목을 확인한 것은 아니지만이 해결 방법을 사용한 후에 다른 프로그램에서 문제를 발견 한 적이 없습니다. 이상한 동작을하는 프로그램의 예가 있습니까? 또한 그들이 실패하면 의심의 여지가 있습니다. 터미널 에뮬레이터가 모든 terminfo 기능을 지원하지는 않습니다. 그것은 지원하는 것을 광고하고 그것을 처리하는 것은 응용 프로그램에 달려 있습니다.
jlliagre 2016 년

3

출력을 cat명령으로 파이프 할 수 있습니다

man man|cat

또는 man 자체를 호출하는이 예제에서와 같이 기본 호출기 대신 사용하십시오.

PAGER=cat man man

2

호출기를 수정하지 않고 대부분의 환경에서 작동 할 수 파이프 가 :

의 예 man ls

  • 전체 페이지를 화면에 그대로 두십시오man ls | cat
  • 페이지가 적힌 읽어 사람이 그것을 언제든지 떠날 가능성이 출력 Q를 :man ls | more
  • 패턴으로 man 내용을 필터링 하고 화면에서 일치하는 줄을 유지하십시오.man ls | grep somestring

-3

2016 년에 두 번째 터미널이나 탭 또는 창을 열거 나 온라인에서 사람을 읽습니다.


그리고 이것은 명백한 실용적인 해결책입니다.
Braiam

1
@Braiam 단말기가 휴대 전화 화면에 있으면 실용적이지 않습니다.
NathaneilCapital

tmux를 배울 때가 된 것 같습니다.
Michael Hampton

-3

내 서버 (FreeBSD)에서도 X와 xfce를 설치합니다. 그런 다음 터미널 에뮬레이터에 큰 버퍼 (예 : 10,000 라인)를 할당하여 그 중 하나에서 매뉴얼 페이지를 완전히 스크롤하고 별도의 터미널 인스턴스를 사용하여 명령을 어셈블합니다. 치료를합니다.

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