在bash脚本中使用-s命令

时间:2013-09-15 17:37:52

标签: linux bash

我有一个微不足道的错误,我似乎无法绕过。我试图返回各个部分的数字,让我们说“man”,因为它存在于所有部分。我使用-s命令但遇到问题。每次我使用它时,我都会“获得你想要的手册页”。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

在获取命令的节号时,您需要类似man -k "page_name" | awk -F'-' "/^page_name \(/ {print $1}"的内容,用您需要的任何命令替换page_name的任何内容。

这对于所有系统都不起作用,因为“man”输出的格式是“实现定义的”。换句话说,FreeBSD,OS X,各种Linux版本等格式可能不一样。例如,我的是:

page_name (1)               - description

如果你只想要节号,我确信你可以做些什么,例如在shell变量中保存该行的结果,并使用参数扩展来删除节号周围的括号:

man -k "page_name" | awk -F'-' "/^page_name \(/ {print $1}" | while IFS= read sect ; do
    sect="${sect##*[(]}"
    sect="${sect%[)]*}"
    printf '%s\n' "$sect"
done

要获取命令显示的部分数量,请在与| wc -l关键字相同的行末尾添加done。对于mount命令,我有3:

2
2freebsd
8

答案 1 :(得分:0)

正确的语法需要一个参数。通常你正在寻找

man -s 1 man

阅读man(1)命令的文档或

man -s 7 man

阅读man(7)宏包。

如果您需要标准部分列表,前者包含该部分。但是,您可能在本地安装了其他部分。例如,/usr/local/share/man的目录列表可能会显示其他部分。

(顺便说一下,-s在这个上下文中不是“命令”,它是一个选项。)

答案 2 :(得分:0)

你误解了-s的性质。来自man man

  

-S list,-s list, - sections = list

     

List是一个以冒号或逗号分隔的“特定订单”手册部分列表,用于搜索。此选项会覆盖   $ MANSECT环境变量。 (-s                 拼写是为了与System V兼容。)

所以,当人看到man -s man时,它认为你想在“男人”部分寻找一个页面(这很可能不存在,因为它不是正常的部分),但你没有说什么页面,所以它问:

  

您想要哪个手册页?

BTW,wrt “男人只是测试案例因为我相信它的所有部分” - 不,它可能只在一个,而AFAIK没有任何一个字所有部分的页面。超过2或3个将是非常不寻常的。

man man中也描述了各种标准部分。