4

man ページを PDF ファイルに変換するスクリプトを作成しようとしています。私が今持っているスクリプトは次のとおりです。

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

問題は、man ページが存在しない場合でもスクリプトが実行され続け、空の PDF ファイルが生成されることです。では、man ページが存在するかどうかを判断する方法があるのだろうか?

4

2 に答える 2

6

関数からの男の終了ステータスを使用する

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
于 2012-09-03T03:55:29.450 に答える