Ubuntu – How to make `man` work for shell builtin commands and keywords

command linemanpage

I use the man command all the time when I want to get information about a specific command. But this doesn't help me too much when that specific command is a shell builtin. For example:

man cd

returns:

No manual entry for cd

My question is: it is possible to make man also work for all shell builtin commands (like cd, alias, history, etc.), and keywords (like if, while, [[, {, etc.)?

Best Answer

The help command when is used with -m option can display information about builtin commands in pseudo-manpage format. For example:

help -m cd | less

will display information about cd command in a format almost exactly like in a manual page.

Starting from this command you can wrap man command in one function in your .bashrc file as follow:

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

After this man will work also for all shell builtin commands and keywords. For example:

man :

will display:

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>
Related Question