只是为了好玩,或者说为了方便,我决定将所有手册页写到文件中。
现在,如果我必须逐个执行,我会这样做man package-name > filename
。但我想做一些聪明的工作,并一次性写入所有内容,无论是使用单个命令还是使用 bash 脚本。到目前为止,我想到的是
cd /usr/share #you may use any folder
whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g
这将给出一个输出,列出所有具有手册页的应用程序。其中的一部分如下所示。
speech-dispatcher
stellarium
synaptic
syslinux
system-config-printer
tabset
terminfo
totem
ufw
unetbootin
unity
unity-greeter
update-manager
upstart
usb_modeswitch
vim
virtualbox
vlc
xmms2
xpdf
yelp
zenity
现在,我需要做的是将此输出重定向到,man
以便我可以将其重定向到文件。完成此操作后,我可以创建一个脚本来光盘到每个文件夹并检查芒。
所以我的问题是,我该如何实现这一点?
或者,也许存在其他方法?
我正在使用 Ubuntu 12.10。
如果合适,请将其迁移到 stackoverflow。但我认为在这里更合适。
答案1
中有许多可执行文件/bin
。如果你想将它们相应的手册页复制到文件中,你可以在终端中使用类似这样的命令
for f in /bin/*;do man $(basename $f) > $HOME/man_$(basename $f); done
执行该命令后,您将找到您主目录中可执行文件对应的所有手册页/bin/
。例如,手册页对应于您主目录中的ls
will take name man_ls.txt
。
如果你只想复制一部分,比如可执行文件的名称以 开头r
,使用,
for f in /bin/r*;do man $(basename $f) > $HOME/man_$(basename $f); done
你可能会收到几条类似这样的信息,
No manual entry for <some_executable>
See 'man 7 undocumented' for help when manual pages are not available.
对于没有 man 条目的可执行文件。
对包含可执行文件(如、、/usr/bin/
等/usr/sbin/
)/sbin/
的其他文件夹执行此操作。
笔记:
您可以使用2>/dev/null
命令来抑制没有 man 输入的可执行文件的错误消息。例如,
for f in /usr/bin/r*;do man $(basename $f) > $HOME/man_$(basename $f) 2>/dev/null; done
根据您的方法
导航到一个文件夹并使用它获得相同的结果,
for f in $(whereis -m * | grep '.gz' |awk '{print$1}' |sed s/://g); do man $f > $HOME/man_$f.txt; done
答案2
首先,为什么您想要一个包含所有手册页的文件吗?如果是为了方便搜索所有手册页中的某个关键字,GNU 已经提供了apropos
此功能:
apropos some-regular-expression
返回与其名称或描述中的正则表达式匹配的所有手册页的列表。
无论如何,如果您仍然想要百科全书文件,那么利用 apropos,您可以通过搜索通用正则表达式来获取系统上所有手册页的列表:
apropos '.*'
然后将结果列表输入到man
命令中:
apropos '.*' | awk '{print $1;}' | xargs man > all-manpages.txt
您还可以使用回答类似的问题“生成所有可用命令及其各自功能的列表”,替换whatis
为man
。