왜 `man`은 $PAGER(less) 대신 stdout으로 인쇄합니까?

왜 `man`은 $PAGER(less) 대신 stdout으로 인쇄합니까?

을 실행하면 매뉴얼 페이지 파일을 여는 대신 (스크롤, 검색 등을 할 수 있도록) man [program]매뉴얼 페이지 텍스트가 터미널에 출력됩니다(la , 대화형 기능을 제공하는 호출기 없음).catless

➜ man git commit
GIT-COMMIT(1)                   Git Manual                  GIT-COMMIT(1)

NAME
       git-commit - Record changes to the repository

SYNOPSIS
[...the rest of the man page]

echo $PAGERreturn.run이 평소처럼 스크롤이나 검색과 같은 기능을 제공하는 대신 less여전히 터미널에 출력을 "실행"한다는 것을 확인했습니다 .man -D -P less [program]catless

디버그 플래그를 사용하면 -d" man" using /usr/bin/less as pager가 표시됩니다. 나는 무슨 일이 일어나고 있는지 어리둥절했다.

기타 유용한 정보:

➜ env | grep LESS       
LESS=-R -M
LESS_TERMCAP_mb=
LESS_TERMCAP_md=
LESS_TERMCAP_me=
LESS_TERMCAP_so=
LESS_TERMCAP_se=
LESS_TERMCAP_us=
LESS_TERMCAP_ue=
➜ echo $TERM     
xterm-256color

한 프로그램에서만 오류가 발생합니다. 직접적인 관련은 없을 것 같지만, 보세요.이 GH 질문세부. tl;dr, 발생하는 오류는 다음과 같습니다.troff: <standard input>:1: name expected (got '\ '): treated as missing

이 내용은 다음에도 교차 게시됩니다.만자로 포럼이 여기에 있습니다.

고쳐 쓰다:

문제는zpm-zsh/shading. 이렇게 하면 \man함수는 무시되고 \별칭만 무시 될 것이라고 생각했습니다 . 이 플러그인을 제거하면 문제가 해결되었지만 그 이유를 알고 싶습니다.

답변1

내가 겪고있는 문제는 env.

아 맙소사컬러 매뉴얼 페이지env변수를 설정할 때 다음을 사용하십시오.

function colored() {
    env \
        LESS_TERMCAP_mb=$(printf "\e[1;31m") \
        LESS_TERMCAP_md=$(printf "\e[1;31m") \
        LESS_TERMCAP_me=$(printf "\e[0m") \
        LESS_TERMCAP_se=$(printf "\e[0m") \
        LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
        LESS_TERMCAP_ue=$(printf "\e[0m") \
        LESS_TERMCAP_us=$(printf "\e[1;32m") \
        PAGER="${commands[less]:-$PAGER}" \
        _NROFF_U=1 \
        PATH="$HOME/bin:$PATH" \
            "$@"
}

function man() {
    colored man "$@"
}

다른 플러그인도 사용하고 있는데,zpm-zsh/shading그 경로 envgrv(만능토너) 별도의 함수로 호출하여 env:

function env () {
    =grc --colour=auto env "$@"
}

이유가 무엇이든, 당신은 grc당신이 좋아하지 않는 일을 합니다.man

해결책:

env1) 전역적으로 정의된 함수를 사용 하여 grc재정의 하지 않는다

2) env다음 명령을 사용하여 별칭/함수가 아닌지 확인하세요.command

function colored() {
    command env \
        LESS_TERMCAP_mb=$(printf "\e[1;31m") \
[....]
}

function man() {
    colored man "$@"
}

관련 정보