我正在尝试编写一个脚本来将手册页转换为 PDF 文件。我现在的脚本是:
#! /usr/bin/env bash
[[ $# -ne 1 ]] && { echo "Usage: $(basename $0) [command]" ; exit 1 ; }
man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
问题是如果手册页不存在,脚本仍然会继续执行,生成一个空的 PDF 文件。所以我想知道是否有办法确定手册页是否存在?
我正在尝试编写一个脚本来将手册页转换为 PDF 文件。我现在的脚本是:
#! /usr/bin/env bash
[[ $# -ne 1 ]] && { echo "Usage: $(basename $0) [command]" ; exit 1 ; }
man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
问题是如果手册页不存在,脚本仍然会继续执行,生成一个空的 PDF 文件。所以我想知道是否有办法确定手册页是否存在?
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 man "$1" > /dev/null 2>&1
then
man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
else
echo "Missing man page: $1" >&2
fi
它并不整洁,但这似乎可以满足您的要求:
if man -w ${1} >/dev/null 2>/dev/null ; then
man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
fi
然而,一些手册页可能存在于手册的不同部分——例如man 1 printf
和man 3 printf
. 您可能希望修改脚本以考虑到这一点。