如何让 `man` 成为 shell 内置命令和关键字?

如何让 `man` 成为 shell 内置命令和关键字?

man当我想获取有关特定命令的信息时,我总是使用该命令。但是当该特定命令是 shell 内置命令时,这对我没有太大帮助。例如:

man cd

返回:

No manual entry for cd

我的问题是:是否可以让 makeman适用于所有 shell 内置命令(如、、、cd等)和关键字(如、、、、等)?aliashistoryifwhile[[{

答案1

命令helpwhen 与选项一起使用-m可以以伪手册页格式显示内置命令的相关信息。例如:

help -m cd | less

cd将以与手册页几乎完全相同的格式显示有关命令的信息。

从此命令开始,您可以将man命令包装在.bashrc文件中的一个函数中,如下所示:

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

此后,这man也适用于所有 shell 内置命令和关键字。例如:

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>

答案2

man bash-builtins

这包含内置命令的帮助片段,尽管格式比help等效的格式稍微简洁一些。

答案3

您可以安装有关使用用于开发的 POSIX 系统作为,

sudo apt-get install manpages-posix-dev

它将为 shell 内置命令提供手册页。

$ 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]


...

答案4

这个解决方案效果很好,但也有点可笑,因为当我看到你的问题时,我首先想到的是“谁还会在命令行中使用 man?难道不是每个人都会用 Google 搜索他们想要的手册页(这样他们就可以获得无限滚动等花哨的东西)?”。然后我意识到我用 Google 搜索的网站通常都有两种类型的命令,所以为什么不直接使用它们来为所有命令提供统一的手册页界面呢。因此,这个乐趣就诞生了。

这需要互联网连接才能查看您至少一次未查找过的任何条目。它还需要这两个小应用程序,而这两个应用程序在 Ubuntu 的默认安装中是缺失的:

 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

并且它会显示 的手册页cd

这使用了一个数据目录 (/usr/share/iman) 来最小化我们的网络要求(因此即使没有连接,它也可以用于您之前已经找到的条目;还可以最小化这个我找到的随机 Linux 手册页站点的负载,其中包含我们想要的系统条目)。如果您不再使用它,您将需要删除它以恢复磁盘空间。

希望剩下的事情就很简单了。

相关内容