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


56

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

man cd

返回:

No manual entry for cd

我的问题是:它能够使man同样适用于所有已shell内建命令(如cdaliashistory,等),和关键字(如ifwhile[[{,等)?


又是如何得出echo的内置命令,但有一个人的网页?
Parto 2014年

5
@AvatarParto echo也是位于中的系统命令(可执行)/bin。您可以使用进行检查type -a echo。同样的事情time也可能发生在其他人身上。
RaduRădeanu2014年

你有没有探索info bash
bbaassssiiee 2014年

您始终可以编写自己的手册页。
Elliott Frisch 2014年

Answers:


66

help命令何时与-moption一起使用可以以伪手册格式显示有关内置命令的信息。例如:

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>

很聪明的办法!+1
phatskat 2014年

5
如果内置文件掩盖了可执行文件,则可以指定该部分。man time主场迎战man 1 time
停止危害莫妮卡(Monica)2014年

1
...注意,即使您是zsh用户,也不太幸运:bugs.launchpad.net/ubuntu/+source/zsh/+bug/1242108(未安装手册页)
Rmano 2014年

infohelp -m为什么这些天我们不能只有好男人手册?还是谢谢你!
Tor Klingberg 2015年

+1 ...不错!yr函数的行为有点类似于C / C ++中通过函数重载而发生的事情。只是奇怪的man type是,在Ubuntu 14.04.4中,不会产生对选项“ -a”或“ -t”的描述。在那里!
Cbhihe

28
man bash-builtins

它包含内置命令的帮助摘要,尽管格式比help同等格式更简洁。


很高兴知道!它来自手册的第7节。到目前为止,我还没有听说过此手册页。+1,但我不能接受此答案,因为它与我要求的不完全相同。
RaduRădeanu2014年

在macOS High Sierra上,该命令只是“人造人”
Tony Barganski

13

您可以安装有关使用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]


...

3
我正在等待有人给出这个答案。但是问题在于,这仅适用于某些内置文件-POSIX 指定的那些内置文件
RaduRădeanu2014年

3
Bash除非在POSIX模式下运行,否则不严格遵守POSIX,因此这些手册页可能并不全面,并且在某些情况下可能是错误的,尤其是在描述某些功能的行为时。
克里斯·

@RaduRădeanu是的,您是完全正确的,它将适用于某些内置程序。
souravc 2014年

3

该解决方案效果很好,但也有点开玩笑,因为当我读到您的问题时,我想到的第一件事是“谁仍然从命令行上实际使用man?难道不是每个人都只是谷歌搜索他们想要的手册页(以便他们获得诸如无限滚动之类的奇特的东西)?”。然后我意识到Google我的网站通常都具有两种类型的命令,所以为什么不使用它们在所有命令之间提供统一的手册页界面。因此,这种乐趣诞生了。

这要求您尚未至少查找一次的所有条目都具有Internet连接。它还需要在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手册页站点上的负载我也找到了我们想要的系统条目)。如果您不再使用它,则将其删除以恢复磁盘空间。

希望其余的工作很简单。


6
“从字面上看,谁还在使用man?”我!以及必须访问数据中心的其他所有人(无需互联网;))
Rinzwind 2014年

要点,这对您没有帮助。
krowe 2014年

6
我会认为相反,我很少使用Google查找bash命令。仅需键入“ man command”而不必离开键盘,速度会大大提高。
劳伦特2014年

alt + tab-> alt + d->命令无需鼠标,取消当前cli命令,滚动以及浏览器为您提供的其他上百万种功能也可以实现相同的功能。我敢肯定你不会知道任何事情,因为你送花儿给人使用本网站和其他类似从山猫... FFS
krowe

如果是内建iman函数,您的函数将返回与相同的输出man bash-builtins
RaduRădeanu2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.