なぜ `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

1つのプログラムでのみエラーが発生します。直接的な関係はないようですが、見てください。この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 "$@"
}

関連情報