当前位置: 首页>>技术问答>>正文


如何使`man`适用于shell内置命令和关键字?

, ,

问题描述

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

man cd

收益:

No manual entry for cd

我的问题是:有可能使man也适用于所有shell内置命令(如cdaliashistory等)和关键字(如ifwhile[[{等)?

最佳解决方法

-m选项一起使用时,help命令可以以pseudo-manpage格式显示有关内置命令的信息。例如:

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>

次佳解决方法

man bash-builtins

这包含内置命令的帮助片段,虽然比help等效的格式略强一些。

第三种解决方法

您可以安装有关使用POSIX system for development的手册页,

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]


...

第四种方法

这个解决方案效果非常好,但也是一个笑话,因为我在阅读你的问题时首先想到的是“谁还在字面上使用命令行中的人?不是每个人都只是谷歌他们想要的手册页(所以他们得到像无限滚动这样的花哨的东西)?’然后我意识到我谷歌的网站通常都有两种类型的命令,所以为什么不用它们来提供跨所有命令的统一手册页界面。因此,这种乐趣诞生了。

这需要互联网连接至少一次您尚未查找过的任何条目。它还需要这两个在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手册页网站上的负载我找到了我们想要的系统条目。如果您不再使用它,您将要删除它以恢复磁盘空间。

希望其余的都很直接。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1481.html,未经允许,请勿转载。