Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何检查手册页是否存在?_Linux_Bash_Conditional Statements_Manual - Fatal编程技术网

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

Linux 如何检查手册页是否存在?,linux,bash,conditional-statements,manual,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文件。因此,我想知道是否有办法确定手册页是否存在?它并不整洁,但这似乎可以满

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

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

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

它并不整洁,但这似乎可以满足您的需要:

if man -w ${1} >/dev/null 2>/dev/null ; then
    man -t ${1} | ps2pdf14 - > "${1}_man.pdf"
fi
但是,一些手册页可能存在于手册的不同章节中,例如
man 1 printf
man 3 printf
。您可能希望修改脚本以考虑到这一点。

从函数中使用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

为什么不直接使用troff/groff呢?无论如何,这些特定的退出状态值可能并不适用于所有平台。我的系统返回缺少的手册页的退出状态1。@Michaelhofman不重要。只要它以非零退出状态退出,您就知道出了问题。如果出了什么问题,那么您可以创建一个case语句,或者直接用$报告退出状态?相反。这对于这个用例来说并不重要。@CodeGnome不知道bash函数将返回最后一个命令的退出状态。谢谢你的功能。