プログラムヘルプテキストがLessを介して自動的にパイプされるようにするにはどうすればよいですか?

プログラムヘルプテキストがLessを介して自動的にパイプされるようにするにはどうすればよいですか?

ちょうどdpkg --help3ページの印刷物が私の顔に飛び出した。一般的な使用法と最も一般的なパラメータを示す最初の10行に興味があるでしょう。

--help一意の引数を使用してプログラム(すべてのプログラム)を実行するたびに、出力が.より長い場合は自動的$(tput lines)にパイプされますless。 bashでこれは簡単に可能ですか?

編集する:結局のところ、私にとって最高の解決策はzshに切り替えることでした。次のフレーズのいずれかを~/.zshrc使用すると、それぞれ独自の長所と短所があります。

# Modify the input line before it runs
function lessify() {
    if [[ "$BUFFER" =~ " --help$" ]] ; then
        BUFFER="$BUFFER | less -FX"
    fi  
    zle accept-line
}

zle -N lessify_widget lessify
# Bind to the Enter key
bindkey '^M' lessify_widget

または

# Alias --help ; ignore rest of the line 
alias -g -- --help="--help | less -FX ; true "

さらに、私はこの問題を調査するのに節約したよりも多くの時間を無駄にしました。少し後悔しないでください。

ベストアンサー1

ではbashデバッグ機能を使用してこれを行うことができますが、これは非常に脆弱なソリューションであり、環境によって大きく異なります。

拡張デバッグを有効にする(参照:詳しくはマニュアルをご覧ください。):

shopt -s extdebug

helprun 関数を作成します。

helprun() {
    if [ "$#" -eq 2 ] && [ "$2" = '--help' ]; then
        "$@" | less -F
        return 1
    fi
}

その後、それを使用してすべてのコマンドをキャプチャします。

trap 'helprun $BASH_COMMAND' DEBUG

これは各コマンドに対して実行され、コマンドhelprun <command>の場合はパイプしてコマンドが実行されないように1を返します(ありがとう)。それ以外の場合は正常に動作します。--helplessextdebug

私が処理できなかった極端なケースがあるかもしれません...

おすすめ記事