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

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

 man cd 

收益:

 No manual entry for cd 

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

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

 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  
 man bash-builtins 

这包含内置命令的帮助片段,虽然它的格式比help等效格式稍微浓缩一些。

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

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

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

  sudo apt-get install tidy html2text 

这些并不是绝对必要的,但它们确实有助于使它看起来更好一些。 Tidy将清理HTML和html2text将html格式化为格式化文本(这通常非常简单,因为大多数这些网站已经是文本格式并且只包含在

标签中。 

现在你需要做的就是将它添加到~/.profile的末尾:

 function iman() { if [ ! -d "/usr/share/iman" ]; then sudo mkdir -ma=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手册页网站上的负载我找到了我们想要的系统条目。 如果您不再使用它,您将要删除它以恢复磁盘空间。

希望其余的都很直接。