如何检查手册页是否存在?

时间:2012-09-03 03:38:57

标签: linux bash conditional-statements manual

我正在尝试编写一个脚本来将手册页转换为PDF文件。我现在的脚本是:

#! /usr/bin/env bash
[[ $# -ne 1 ]] && { echo "Usage: $(basename $0) [command]" ; exit 1 ; }
man -t ${1} | ps2pdf14 - > "${1}_man.pdf"

问题是如果手册页不存在,脚本仍将继续执行,生成一个空的PDF文件。所以我想知道是否有办法确定手册页是否存在?

2 个答案:

答案 0 :(得分:6)

从函数

使用Man的退出状态

man(1)手册页定义了以下退出状态代码:

  

退出状态

0      Successful program execution.
1      Usage, syntax or configuration file error.
2      Operational error.
3      A child process returned a non-zero exit status.
16     At least one of the pages/files/keywords didn't exist or wasn't
       matched.

这意味着您可以使用 man 的退出状态来确定页面是否可通过 manpath 获得。例如:

check_for_man_page () {
    man "$1" > /dev/null 2>&1
}

使用此功能,您可以在退出状态上使用测试条件,如下所示:

$ check_for_man_page "cat" && echo 'Found it!'
Found it!

$ check_for_man_page "quux" || echo 'Not found!'
Not found!

使用If / Else语句

这是另一种方法,使用if / else语句来确定是否运行原始代码:

if man "$1" > /dev/null 2>&1
then
    man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
else
    echo "Missing man page: $1" >&2
fi

答案 1 :(得分:1)

这不是很整洁,但这似乎做你想要的:

if man -w ${1} >/dev/null 2>/dev/null ; then
    man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
fi

但是,某些手册页可能存在于手册的不同部分 - 例如man 1 printfman 3 printf。您可能希望修改脚本以将其考虑在内。