问题描述
当我想获取有关特定命令的信息时,我一直使用man
命令。但是,当特定命令是内置shell时,这对我没有多大帮助。例如:
man cd
收益:
No manual entry for cd
我的问题是:有可能使man
也适用于所有shell内置命令(如cd
,alias
,history
等)和关键字(如if
,while
,[[
,{
等)?
最佳解决方法
与-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手册页网站上的负载我找到了我们想要的系统条目。如果您不再使用它,您将要删除它以恢复磁盘空间。
希望其余的都很直接。