freebsd-dev/gnu/usr.bin/man/apropos/apropos.sh

99 lines
1.9 KiB
Bash
Raw Normal View History

1993-07-07 23:07:02 +00:00
#!/bin/sh
#
# apropos -- search the whatis database for keywords.
#
# Copyright (c) February 1996 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
1993-07-07 23:07:02 +00:00
# Copyright (c) 1990, 1991, John W. Eaton.
#
# You may distribute under the terms of the GNU General Public
# License as specified in the README file that comes with the man
# distribution.
#
# John W. Eaton
# jwe@che.utexas.edu
# Department of Chemical Engineering
# The University of Texas at Austin
# Austin, Texas 78712
#
1997-02-22 15:48:31 +00:00
# $Id$
1993-07-07 23:07:02 +00:00
PATH=/bin:/usr/bin:$PATH
db=whatis # name of whatis data base
grepopt=''
1993-07-07 23:07:02 +00:00
# man -k complain if exit_nomatch=1 and no keyword matched
: ${exit_nomatch=0}
exit_error=2
# argument test
case $# in 0)
echo "usage: `basename $0` keyword ..." >&2
exit $exit_error
;;
esac
1993-07-07 23:07:02 +00:00
case "$0" in
*whatis) grepopt='-w';; # run as whatis(1)
*) grepopt='';; # otherwise run as apropos(1)
esac
# test manpath
1993-07-07 23:07:02 +00:00
manpath=`%bindir%/manpath -q | tr : '\040'`
case X"$manpath" in X)
echo "`basename $0`: manpath is null, use \"/usr/share/man\"" >&2
manpath=/usr/share/man
;;
esac
1993-07-07 23:07:02 +00:00
# reset $PAGER if $PAGER is empty
case X"$PAGER" in X)
PAGER="%pager%"
;;
esac
1993-07-07 23:07:02 +00:00
# search for existing */whatis databases
mandir=''
for d in $manpath
1993-07-07 23:07:02 +00:00
do
if [ -f "$d/$db" -a -r "$d/$db" ]
then
mandir="$mandir $d/$db"
fi
done
1993-07-07 23:07:02 +00:00
case X"$mandir" in X)
echo "`basename $0`: no whatis databases in $manpath" >&2
exit $exit_error
esac
1993-07-07 23:07:02 +00:00
for manpage
do
if grep -hi $grepopt -- "$manpage" $mandir; then :
else
echo "$manpage: nothing appropriate"
fi
done |
1993-07-07 23:07:02 +00:00
( # start $PAGER only if we find a manual page
while read line
do
case $line in
# collect error(s)
*": nothing appropriate") line2="$line2$line\n";;
# matched line or EOF
*) break;;
esac
done
# nothing found, exit
if test -z "$line" -a ! -z "$line2"; then
printf -- "$line2"
exit $exit_nomatch
else
( printf -- "$line2"; echo $line; cat ) | $PAGER
fi
)