シェルで引数を
#!/bin/bash if [ $# -ne 2 ]; then echo "指定された引数は$#個です。" 1>&2 echo "実行するには2個の引数が必要です。" 1>&2 exit 1 fi cat <<__EOT__ 指定された引数は、 $1 $2 の$#個です。 __EOT__ exit 0
上記をベースに、引数で表示するmanを変えていきます。caseで引数に応じて出し分ける。
#!/bin/bash output() { case $1 in "daemon") cat <<__EOT__ NAME daemon SYNOPOIS A program that resides in main memory and provides specific functions __EOT__ exit 0 ;; "cli") cat <<__EOT__ NAME cli SYNOPOIS A text-based interface that allows you to enter commands to interact with your computer's operating system __EOT__ exit 0 ;; esac } if [ $1 == "man" ]; then if [ $# -ne 2 ]; then echo "Please enter arguments after man." 1>&2 exit 1 else output $2 fi fi
$ ./test.sh man daemon
NAME daemon
SYNOPOIS A program that resides in main memory and provides specific functions
$ ./test.sh man cli
NAME cli
SYNOPOIS A text-based interface that allows you to enter commands to interact with your computer’s operating system
gen-manpage.pyだと、コンテンツは別ページに持っているようです。topディレクトリにディレクトリ名を繋げて参照しています。
os.getenvは環境変数を持ってくる
import os import subprocess import sys import tempfile BINARIES = [ 'src/bitcoind', 'src/bitcoin-cli', 'src/bitcoin-tx', 'src/bitcoin-wallet', 'src/bitcoin-util', 'src/qt/bitcoin-qt', ] # Paths to external utilities. git = os.getenv('GIT', 'git') help2man = os.getenv('HELP2MAN', 'help2man') # If not otherwise specified, get top directory from git. topdir = os.getenv('TOPDIR') if not topdir: r = subprocess.run([git, 'rev-parse', '--show-toplevel'], stdout=subprocess.PIPE, check=True, text=True) topdir = r.stdout.rstrip() # Get input and output directories. builddir = os.getenv('BUILDDIR', topdir) mandir = os.getenv('MANDIR', os.path.join(topdir, 'doc/man')) # Verify that all the required binaries are usable, and extract copyright # message in a first pass. versions = [] for relpath in BINARIES: abspath = os.path.join(builddir, relpath) try: r = subprocess.run([abspath, "--version"], stdout=subprocess.PIPE, check=True, text=True) except IOError: print(f'{abspath} not found or not an executable', file=sys.stderr) sys.exit(1) # take first line (which must contain version) verstr = r.stdout.splitlines()[0] # last word of line is the actual version e.g. v22.99.0-5c6b3d5b3508 verstr = verstr.split()[-1] assert verstr.startswith('v') # remaining lines are copyright copyright = r.stdout.split('\n')[1:] assert copyright[0].startswith('Copyright (C)') versions.append((abspath, verstr, copyright)) if any(verstr.endswith('-dirty') for (_, verstr, _) in versions): print("WARNING: Binaries were built from a dirty tree.") print('man pages generated from dirty binaries should NOT be committed.') print('To properly generate man pages, please commit your changes (or discard them), rebuild, then run this script again.') print() with tempfile.NamedTemporaryFile('w', suffix='.h2m') as footer: # Create copyright footer, and write it to a temporary include file. # Copyright is the same for all binaries, so just use the first. footer.write('[COPYRIGHT]\n') footer.write('\n'.join(versions[0][2]).strip()) footer.flush() # Call the binaries through help2man to produce a manual page for each of them. for (abspath, verstr, _) in versions: outname = os.path.join(mandir, os.path.basename(abspath) + '.1') print(f'Generating {outname}…') subprocess.run([help2man, '-N', '--version-string=' + verstr, '--include=' + footer.name, '-o', outname, abspath], check=True)