シェルの組み込みコマンドとキーワードに対して「man」を機能させる方法は?


56

man特定のコマンドに関する情報を取得する場合は、常にコマンドを使用します。しかし、特定のコマンドがシェル組み込みコマンドである場合、これはあまり役に立ちません。例えば:

man cd

返却値:

No manual entry for cd

私の質問は:することが可能であるman、すべてのシェルの組み込みコマンド(のようなのために働くcdaliashistory、など)、およびキーワード(のようなifwhile[[{、など)?


そして、どうしてecho組み込みコマンドがありますが、マニュアルページがありますか?
パート14年

5
@AvatarParto echoは、にあるシステムコマンド(実行可能ファイル)です/bin。これはを使用して確認できtype -a echoます。同じことがtime、おそらく他の人にも起こります。
ラドゥラデアヌ14年

info bashまだ探検しましたか?
bbaassssiiee

いつでも独自のマニュアルページを書くことができます。
エリオットフリッシュ14年

回答:


66

helpで使用されるコマンド-mの擬似manページ形式の組み込みコマンドに関する情報を表示することができますオプション。例えば:

help -m cd | less

cdコマンドに関する情報を、マニュアルページとほぼ同じ形式で表示します。

このコマンドから開始して、次のようにファイルman内の1つの関数にコマンドをラップでき.bashrcます。

man () {
    case "$(type -t -- "$1")" in
    builtin|keyword)
        help -m "$1" | sensible-pager
        ;;
    *)
        command man "$@"
        ;;
    esac
}

これmanは、すべてのシェル組み込みコマンドおよびキーワードに対しても機能します。例えば:

man :

表示されます:

NAME
    : - Null command.

SYNOPSIS
    :

DESCRIPTION
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

SEE ALSO
    bash(1)

IMPLEMENTATION
    GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

非常に賢いアプローチ!+1
phatskat 14年

5
ビルトインによってマスクされた実行可能ファイルがある場合、セクションを指定できます。man timevs.man 1 time
ハーミングモニカの停止

1
...あなたがある場合ということが、注意してzshご使用はそれほど幸運ではありませんユーザー:bugs.launchpad.net/ubuntu/+source/zsh/+bug/1242108(なしmanページがインストールされていない)
Rmano

infohelp -m、なぜ私たちは、これらの日の良いmanページを持つことができませんか?まあありがとう!
TorのKlingberg

+1 ...いいね!yr関数の動作は、C / C ++での関数のオーバーロードによって発生するものに多少似ています...不思議なことにman type、Ubuntu 14.04.4 ....のオプション "-a"または "-t"の説明は生成されません。そこにいる!
-Cbhihe

28
man bash-builtins

これには、組み込みコマンドのヘルプスニペットが含まれていますが、help同等のものよりもわずかに圧縮された形式です。


知っておきたい!それはマニュアルのセクション7からです。私は今までこのマニュアルページについて聞いていませんでした。+1ですが、この答えは私が尋ねたとおりのものではないため、受け入れられません。
ラドゥラデアヌ14年

macOS High Sierraでは、そのコマンドは単に「人間の組み込み」です
トニーバルガンスキー

13

POSIXシステムを使用した開発に関するマニュアルページは、次のようにインストールできます。

sudo apt-get install manpages-posix-dev

シェル組み込みコマンドのmanページを提供します。

$ type cd
cd is a shell builtin

今、試して、

$ man cd
CD(P)                      POSIX Programmer's Manual                      CD(P)

NAME
   cd - change the working directory

SYNOPSIS
   cd [-L | -P] [directory]


...

3
私は誰かがこの答えを持って来るのを待っていました。しかし、問題は、これが一部の組み込み(POSIXで指定されたもの)でのみ機能することです。
ラドゥラデアヌ14年

3
BashはPOSIXモードで実行しない限りPOSIXに厳密に準拠していないため、これらのマニュアルページは包括的ではなく、状況によっては、特に特定の機能の動作を説明するときに間違っている可能性があります。
クリスダウン14年

@RaduRădeanuはい、あなたは絶対に正しいです、それはいくつかの組み込みで動作します。
souravc 14年

3

この解決策は完璧に機能しますが、あなたの質問を読んだときに私が最初に考えたのは、「文字通りコマンドラインの人を使っているのは誰ですか?」誰もがGoogleだけが必要なマニュアルページではないので(無制限のスクロールなどの派手なものが得られるように)?」それから私は、Googleのサイトには通常両方のタイプのコマンドがあるので、すべてのコマンドで統一されたマニュアルページインターフェイスを提供するためにそれらを使用しないでください。したがって、この楽しさが生まれました。

これには、少なくとも1回はまだ検索していないエントリに対してインターネット接続が必要です。また、Ubuntuのデフォルトのインストールにはないこれらの2つの小さなアプリが必要です。

 sudo apt-get install tidy html2text

これらは絶対に必要というわけではありませんが、少し見栄えを良くするのに役立ちます。TidyはHTMLをクリーンアップし、html2textはそのhtmlをフォーマット済みテキストとしてフォーマットします(これらのサイトのほとんどはすでにテキストフォーマット済みで<pre>タグでラップされているため、通常は非常に簡単です。

あとは、これを~/.profile:の最後に追加するだけです。

function iman() {
    if [ ! -d "/usr/share/iman" ]; then
        sudo mkdir -m a=rwx /usr/share/iman
    fi
    if [ ! -f "/usr/share/iman/$1.html" ]; then
        curl "http://unixhelp.ed.ac.uk/CGI/man-cgi?$1"| tidy -n -asxml 2>/dev/null| html2text > "/usr/share/iman/$1.html"; 
    fi
    if [ -f "/usr/share/iman/$1.html" ]; then
        cat "/usr/share/iman/$1.html";
    else
        echo "Entry not found."
    fi
}

ログアウトしてから再度ログインすると、次のように入力できるはずです。

iman cd

のmanページが表示されcdます。

これは、ネットワーク要件を最小限に抑えるためにデータディレクトリ(/ usr / share / iman)を使用します(したがって、接続なしでも以前に見つけたエントリに対して機能します。また、このランダムなLinux manページサイトの負荷を最小限に抑えます。必要なシステムエントリが見つかりました)。これを使用しない場合は、ディスクスペースを回復するためにこれを削除する必要があります。

うまくいけば、残りはかなり簡単です。


6
「文字通り、コマンドラインの人を文字通り使用しているのは誰ですか?」およびデータセンターにアクセスする必要がある他のすべてのユーザー(インターネットはありません;))
リンツウィンド14年

要するに、これはあなたが明確になるのに役立ちません。
クロー14年

6
反対のことだと思いますが、Googleを使用してbashコマンドを検索することはほとんどありません。キーボードから離れずに「manコマンド」と入力するだけで、はるかに高速になります。
ローレン

alt + tab-> alt + d->コマンドは、マウスなしで、現在のcliコマンドをキャンセルせずに、スクロールやブラウザが提供する他の何百もの素晴らしい機能を使用して同じことを行います。私はあなたなかれオオヤマネコからそれのように、このサイトや他の人を使用するので、あなたはそれについて何も知らないだろうと確信している... FFS
krowe

組み込みの場合、iman関数はと同じ出力を返しますman bash-builtins
ラドゥラデアヌ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.