18462SApril.Chin@Sun.COM#!/usr/bin/ksh93 28462SApril.Chin@Sun.COM 38462SApril.Chin@Sun.COM# 48462SApril.Chin@Sun.COM# CDDL HEADER START 58462SApril.Chin@Sun.COM# 68462SApril.Chin@Sun.COM# The contents of this file are subject to the terms of the 78462SApril.Chin@Sun.COM# Common Development and Distribution License (the "License"). 88462SApril.Chin@Sun.COM# You may not use this file except in compliance with the License. 98462SApril.Chin@Sun.COM# 108462SApril.Chin@Sun.COM# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 118462SApril.Chin@Sun.COM# or http://www.opensolaris.org/os/licensing. 128462SApril.Chin@Sun.COM# See the License for the specific language governing permissions 138462SApril.Chin@Sun.COM# and limitations under the License. 148462SApril.Chin@Sun.COM# 158462SApril.Chin@Sun.COM# When distributing Covered Code, include this CDDL HEADER in each 168462SApril.Chin@Sun.COM# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 178462SApril.Chin@Sun.COM# If applicable, add the following below this CDDL HEADER, with the 188462SApril.Chin@Sun.COM# fields enclosed by brackets "[]" replaced with your own identifying 198462SApril.Chin@Sun.COM# information: Portions Copyright [yyyy] [name of copyright owner] 208462SApril.Chin@Sun.COM# 218462SApril.Chin@Sun.COM# CDDL HEADER END 228462SApril.Chin@Sun.COM# 238462SApril.Chin@Sun.COM 248462SApril.Chin@Sun.COM# 25*10898Sroland.mainz@nrubsig.org# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 268462SApril.Chin@Sun.COM# Use is subject to license terms. 278462SApril.Chin@Sun.COM# 288462SApril.Chin@Sun.COM 298462SApril.Chin@Sun.COM# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant 308462SApril.Chin@Sun.COMexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin 318462SApril.Chin@Sun.COM 328462SApril.Chin@Sun.COM# Make sure all math stuff runs in the "C" locale to avoid problems 338462SApril.Chin@Sun.COM# with alternative # radix point representations (e.g. ',' instead of 348462SApril.Chin@Sun.COM# '.' in de_DE.*-locales). This needs to be set _before_ any 358462SApril.Chin@Sun.COM# floating-point constants are defined in this script). 368462SApril.Chin@Sun.COMif [[ "${LC_ALL}" != "" ]] ; then 378462SApril.Chin@Sun.COM export \ 388462SApril.Chin@Sun.COM LC_MONETARY="${LC_ALL}" \ 398462SApril.Chin@Sun.COM LC_MESSAGES="${LC_ALL}" \ 408462SApril.Chin@Sun.COM LC_COLLATE="${LC_ALL}" \ 418462SApril.Chin@Sun.COM LC_CTYPE="${LC_ALL}" 428462SApril.Chin@Sun.COM unset LC_ALL 438462SApril.Chin@Sun.COMfi 448462SApril.Chin@Sun.COMexport LC_NUMERIC=C 458462SApril.Chin@Sun.COM 468462SApril.Chin@Sun.COMfunction fatal_error 478462SApril.Chin@Sun.COM{ 488462SApril.Chin@Sun.COM print -u2 "${progname}: $*" 498462SApril.Chin@Sun.COM exit 1 508462SApril.Chin@Sun.COM} 518462SApril.Chin@Sun.COM 528462SApril.Chin@Sun.COMfunction debug_print 538462SApril.Chin@Sun.COM{ 548462SApril.Chin@Sun.COM # don't use "--" here to allow "-f" for formatting 558462SApril.Chin@Sun.COM# print -u2 "$@" 568462SApril.Chin@Sun.COM return 0 578462SApril.Chin@Sun.COM} 588462SApril.Chin@Sun.COM 598462SApril.Chin@Sun.COM# Build a list of compound variables calculated from MANPATH and 608462SApril.Chin@Sun.COM# locale which contain... 618462SApril.Chin@Sun.COM# "manpath_element" - the MANPATH element this entry belongs to 628462SApril.Chin@Sun.COM# "dir" - physical directory of "manpath_element" 638462SApril.Chin@Sun.COM# "sect" - section (if "manpath_element" is something like /usr/share/man,1b) 648462SApril.Chin@Sun.COM# ... and put the result in the array named by argv[1] 658462SApril.Chin@Sun.COMfunction enumerate_mandirs 668462SApril.Chin@Sun.COM{ 678462SApril.Chin@Sun.COM nameref md=$1 688462SApril.Chin@Sun.COM typeset manpath_element dir sect manlang 698462SApril.Chin@Sun.COM integer i=0 708462SApril.Chin@Sun.COM 718462SApril.Chin@Sun.COM if [[ "${LC_MESSAGES}" != "" ]] ; then 728462SApril.Chin@Sun.COM manlang="${LC_MESSAGES}" 738462SApril.Chin@Sun.COM else 748462SApril.Chin@Sun.COM manlang="${LANG}" 758462SApril.Chin@Sun.COM fi 768462SApril.Chin@Sun.COM 778462SApril.Chin@Sun.COM print -r -- "${MANPATH//:/$'\n'}" | while read manpath_element ; do 788462SApril.Chin@Sun.COM # strip section from manpath elements like "/usr/share/man,1b" 798462SApril.Chin@Sun.COM dir="${manpath_element/~(E)(.*),(.*)/\1}" 808462SApril.Chin@Sun.COM sect="${manpath_element/~(E)(.*),(.*)/\2}" 818462SApril.Chin@Sun.COM [[ "${sect}" == "${dir}" ]] && sect="" 828462SApril.Chin@Sun.COM 838462SApril.Chin@Sun.COM if [[ "${manlang}" != "" && -d "${dir}/${manlang}" ]] ; then 848462SApril.Chin@Sun.COM md+=( 858462SApril.Chin@Sun.COM manpath_element="${manpath_element}" 868462SApril.Chin@Sun.COM dir="${dir}/${manlang}" 878462SApril.Chin@Sun.COM sect="${sect}" 888462SApril.Chin@Sun.COM ) 898462SApril.Chin@Sun.COM fi 908462SApril.Chin@Sun.COM if [[ -d "${dir}" ]] ; then 918462SApril.Chin@Sun.COM md+=( 928462SApril.Chin@Sun.COM manpath_element="${manpath_element}" 938462SApril.Chin@Sun.COM dir="${dir}" 948462SApril.Chin@Sun.COM sect="${sect}" 958462SApril.Chin@Sun.COM ) 968462SApril.Chin@Sun.COM fi 978462SApril.Chin@Sun.COM done 988462SApril.Chin@Sun.COM 998462SApril.Chin@Sun.COM return 0 1008462SApril.Chin@Sun.COM} 1018462SApril.Chin@Sun.COM 1028462SApril.Chin@Sun.COMfunction enumerate_mansects 1038462SApril.Chin@Sun.COM{ 1048462SApril.Chin@Sun.COM nameref ms=$1 1058462SApril.Chin@Sun.COM nameref mandir_node=$2 1068462SApril.Chin@Sun.COM typeset mancf="${mandir_node.dir}/man.cf" 1078462SApril.Chin@Sun.COM typeset x s l 1088462SApril.Chin@Sun.COM 1098462SApril.Chin@Sun.COM if [[ "${mandir_node.sect}" != "" ]] ; then 1108462SApril.Chin@Sun.COM x="${mandir_node.sect}" 1118462SApril.Chin@Sun.COM elif [[ "${MANSECTS}" != "" ]] ; then 1128462SApril.Chin@Sun.COM x="${MANSECTS//,/$'\n'}" 1138462SApril.Chin@Sun.COM elif [[ -f "${mancf}" && -r "${mancf}" ]] ; then 1148462SApril.Chin@Sun.COM x="$(egrep -v '^#|^[[:space:]]*$' <"${mancf}" | egrep '^MANSECTS=')" 1158462SApril.Chin@Sun.COM x="${x/MANSECTS=}/" 1168462SApril.Chin@Sun.COM x="${x//,/$'\n'}" 1178462SApril.Chin@Sun.COM else 1188462SApril.Chin@Sun.COM x="$(cd "${mandir_node.dir}" ; \ 1198462SApril.Chin@Sun.COM ls -1d ~(El)(sman|man).*/ | \ 1208462SApril.Chin@Sun.COM while read s ; do \ 1218462SApril.Chin@Sun.COM s="${s/~(El)(sman|man)/}" ; \ 1228462SApril.Chin@Sun.COM s="${s/~(Er)\//}" ; \ 1238462SApril.Chin@Sun.COM print -r -- "$s" ; \ 1248462SApril.Chin@Sun.COM done)" 1258462SApril.Chin@Sun.COM fi 1268462SApril.Chin@Sun.COM 1278462SApril.Chin@Sun.COM while read l ; do 1288462SApril.Chin@Sun.COM [[ "${l}" != ~(Elr)[[:blank:]]* ]] && ms+=( "${l}" ) 1298462SApril.Chin@Sun.COM# print -- "sect=$l" 1308462SApril.Chin@Sun.COM done <<<"${x}" 1318462SApril.Chin@Sun.COM 1328462SApril.Chin@Sun.COM# printf "enumerate_mansects: found %d entries.\n" ${#ms[@]} 1338462SApril.Chin@Sun.COM 1348462SApril.Chin@Sun.COM return 0 1358462SApril.Chin@Sun.COM} 1368462SApril.Chin@Sun.COM 1378462SApril.Chin@Sun.COM# wrapper around more/less 1388462SApril.Chin@Sun.COMfunction browse_manpage 1398462SApril.Chin@Sun.COM{ 1408462SApril.Chin@Sun.COM typeset tmpdirname 1418462SApril.Chin@Sun.COM typeset doc_filename="$1" 1428462SApril.Chin@Sun.COM typeset doc_title="$2" 1438462SApril.Chin@Sun.COM 1448462SApril.Chin@Sun.COM # squish characters in filename which are not allowed in a filesystem 1458462SApril.Chin@Sun.COM # (currently '/') 1468462SApril.Chin@Sun.COM doc_title="${doc_title//\//}" 1478462SApril.Chin@Sun.COM 1488462SApril.Chin@Sun.COM # check if we have "less" installed, if not fall back to /usr/xpg4/bin/more 1498462SApril.Chin@Sun.COM if which less >/dev/null 2>&1 ; then 1508462SApril.Chin@Sun.COM # use "cat" here to avoid that "less" may try funny things 1518462SApril.Chin@Sun.COM cat <"${doc_filename}" | less -I -M $"--prompt=MManual\ page\ ${doc_title}\ ?ltline\ %lt?L/%L.:" 1528462SApril.Chin@Sun.COM else 1538462SApril.Chin@Sun.COM tmpdirname="$(mktemp -d "/tmp/shman_${PPID}_$$_XXXXXX")" 1548462SApril.Chin@Sun.COM 1558462SApril.Chin@Sun.COM mkdir -p "${tmpdirname}" || { print -u2 -f $"Couldn't create tmp. dir %s\n" "${tmpdirname}" ; return 1 ; } 1568462SApril.Chin@Sun.COM 1578462SApril.Chin@Sun.COM ( 1588462SApril.Chin@Sun.COM cd "${tmpdirname}" 1598462SApril.Chin@Sun.COM 1608462SApril.Chin@Sun.COM # note: we need to support /dev/stdin 1618462SApril.Chin@Sun.COM cat <"${doc_filename}" >"./${doc_title}" 1628462SApril.Chin@Sun.COM 1638462SApril.Chin@Sun.COM /usr/xpg4/bin/more "${doc_title}" 1648462SApril.Chin@Sun.COM 1658462SApril.Chin@Sun.COM rm -f "${doc_title}" 1668462SApril.Chin@Sun.COM ) 1678462SApril.Chin@Sun.COM 1688462SApril.Chin@Sun.COM rmdir "${tmpdirname}" 1698462SApril.Chin@Sun.COM fi 1708462SApril.Chin@Sun.COM 1718462SApril.Chin@Sun.COM return 0 1728462SApril.Chin@Sun.COM} 1738462SApril.Chin@Sun.COM 1748462SApril.Chin@Sun.COM# /usr/bin/man <keyword> 1758462SApril.Chin@Sun.COMfunction show_manpage 1768462SApril.Chin@Sun.COM{ 177*10898Sroland.mainz@nrubsig.org compound -a mandirs 1788462SApril.Chin@Sun.COM integer i 1798462SApril.Chin@Sun.COM integer j 1808462SApril.Chin@Sun.COM 1818462SApril.Chin@Sun.COM enumerate_mandirs mandirs 1828462SApril.Chin@Sun.COM# debug_print -- "${mandirs[@]}" 1838462SApril.Chin@Sun.COM 1848462SApril.Chin@Sun.COM integer num_mandirs=${#mandirs[@]} 1858462SApril.Chin@Sun.COM 1868462SApril.Chin@Sun.COM for ((i=0 ; i < num_mandirs ; i++ )) ; do 1878462SApril.Chin@Sun.COM typeset mandir="${mandirs[i].dir}" 1888462SApril.Chin@Sun.COM 1898462SApril.Chin@Sun.COM typeset -a mansects 1908462SApril.Chin@Sun.COM enumerate_mansects mansects "mandirs[$i]" 1918462SApril.Chin@Sun.COM 1928462SApril.Chin@Sun.COM integer num_mansects="${#mansects[@]}" 1938462SApril.Chin@Sun.COM# debug_print -- "mansects=${mansects[@]}" 1948462SApril.Chin@Sun.COM 1958462SApril.Chin@Sun.COM for ((j=0 ; j < num_mansects ; j++ )) ; do 1968462SApril.Chin@Sun.COM typeset mansect="${mansects[j]}" 1978462SApril.Chin@Sun.COM 1988462SApril.Chin@Sun.COM # try 1: SGML manpage 1998462SApril.Chin@Sun.COM typeset match="${mandir}/sman${mansect}/${manname}.${mansect}" 2008462SApril.Chin@Sun.COM if [[ -r "${match}" ]] ; then 2018462SApril.Chin@Sun.COM typeset note nlink 2028462SApril.Chin@Sun.COM 2038462SApril.Chin@Sun.COM # follow SGML links if needed (needs rework, including protection against link loops) 2048462SApril.Chin@Sun.COM while true ; do 2058462SApril.Chin@Sun.COM debug_print -f "match: %s\n" "${match}" 2068462SApril.Chin@Sun.COM 2078462SApril.Chin@Sun.COM tmp="$(cd "${mandir}" ; LC_MESSAGES=C /usr/lib/sgml/sgml2roff "${match}")" 2088462SApril.Chin@Sun.COM read note nlink <<<"${tmp}" 2098462SApril.Chin@Sun.COM 2108462SApril.Chin@Sun.COM if [[ "${note}" == ".so" ]] ; then 2118462SApril.Chin@Sun.COM match="${nlink}" 2128462SApril.Chin@Sun.COM else 2138462SApril.Chin@Sun.COM break 2148462SApril.Chin@Sun.COM fi 2158462SApril.Chin@Sun.COM done 2168462SApril.Chin@Sun.COM 2178462SApril.Chin@Sun.COM tbl <<<"${tmp}" | eqn | nroff -u0 -Tlp -man - | col -x | browse_manpage /dev/stdin "${manname}(${mansect})" 2188462SApril.Chin@Sun.COM return 0 2198462SApril.Chin@Sun.COM fi 2208462SApril.Chin@Sun.COM 2218462SApril.Chin@Sun.COM # try 2: troff manpage 2228462SApril.Chin@Sun.COM match="${mandir}/man${mansect}/${manname}.${mansect}" 2238462SApril.Chin@Sun.COM if [[ -r "${match}" ]] ; then 2248462SApril.Chin@Sun.COM debug_print -f "match: %s\n" "${match}" 2258462SApril.Chin@Sun.COM tbl <"${match}" | eqn | nroff -u0 -Tlp -man - | col -x | browse_manpage /dev/stdin "${manname}(${mansect})" 2268462SApril.Chin@Sun.COM return 0 2278462SApril.Chin@Sun.COM fi 2288462SApril.Chin@Sun.COM done 2298462SApril.Chin@Sun.COM unset mansects num_mansects 2308462SApril.Chin@Sun.COM done 2318462SApril.Chin@Sun.COM 2328462SApril.Chin@Sun.COM printf $"No manual entry for %s.\n" "${manname}" 2338462SApril.Chin@Sun.COM return 0 2348462SApril.Chin@Sun.COM} 2358462SApril.Chin@Sun.COM 2368462SApril.Chin@Sun.COM# /usr/bin/man -l <keyword> 2378462SApril.Chin@Sun.COMfunction list_manpages 2388462SApril.Chin@Sun.COM{ 239*10898Sroland.mainz@nrubsig.org compound -a mandirs 2408462SApril.Chin@Sun.COM 2418462SApril.Chin@Sun.COM enumerate_mandirs mandirs 2428462SApril.Chin@Sun.COM #debug_print -- "${mandirs[@]}" 2438462SApril.Chin@Sun.COM 2448462SApril.Chin@Sun.COM integer num_mandirs=${#mandirs[@]} 2458462SApril.Chin@Sun.COM 2468462SApril.Chin@Sun.COM for ((i=0 ; i < num_mandirs ; i++ )) ; do 2478462SApril.Chin@Sun.COM typeset mandir="${mandirs[i].dir}" 2488462SApril.Chin@Sun.COM 2498462SApril.Chin@Sun.COM typeset -a mansects 2508462SApril.Chin@Sun.COM enumerate_mansects mansects "mandirs[$i]" 2518462SApril.Chin@Sun.COM 2528462SApril.Chin@Sun.COM integer num_mansects="${#mansects[@]}" 2538462SApril.Chin@Sun.COM# debug_print -- "mansects=${mansects[@]}" 2548462SApril.Chin@Sun.COM 2558462SApril.Chin@Sun.COM for ((j=0 ; j < num_mansects ; j++ )) ; do 2568462SApril.Chin@Sun.COM mansect="${mansects[j]}" 2578462SApril.Chin@Sun.COM 2588462SApril.Chin@Sun.COM # try 1: SGML manpage 2598462SApril.Chin@Sun.COM match="${mandir}/sman${mansect}/${manname}.${mansect}" 2608462SApril.Chin@Sun.COM if [[ -r "${match}" ]] ; then 2618462SApril.Chin@Sun.COM printf "%s (%s)\t-M %s\n" "${manname}" "${mansect}" "${mandir}" 2628462SApril.Chin@Sun.COM continue 2638462SApril.Chin@Sun.COM fi 2648462SApril.Chin@Sun.COM 2658462SApril.Chin@Sun.COM # try 2: troff manpage 2668462SApril.Chin@Sun.COM match="${mandir}/man${mansect}/${manname}.${mansect}" 2678462SApril.Chin@Sun.COM if [[ -r "${match}" ]] ; then 2688462SApril.Chin@Sun.COM printf "%s (%s)\t-M %s\n" "${manname}" "${mansect}" "${mandir}" 2698462SApril.Chin@Sun.COM continue 2708462SApril.Chin@Sun.COM fi 2718462SApril.Chin@Sun.COM done 2728462SApril.Chin@Sun.COM unset mansects num_mansects 2738462SApril.Chin@Sun.COM done 2748462SApril.Chin@Sun.COM 2758462SApril.Chin@Sun.COM return 0 2768462SApril.Chin@Sun.COM} 2778462SApril.Chin@Sun.COM 2788462SApril.Chin@Sun.COM# /usr/bin/appropos 2798462SApril.Chin@Sun.COMfunction list_keywords 2808462SApril.Chin@Sun.COM{ 2818462SApril.Chin@Sun.COM typeset -a mandirs 2828462SApril.Chin@Sun.COM typeset name namesec title 2838462SApril.Chin@Sun.COM 2848462SApril.Chin@Sun.COM enumerate_mandirs mandirs 2858462SApril.Chin@Sun.COM #debug_print -- "${mandirs[@]}" 2868462SApril.Chin@Sun.COM 2878462SApril.Chin@Sun.COM integer num_mandirs=${#mandirs[@]} 2888462SApril.Chin@Sun.COM 2898462SApril.Chin@Sun.COM for ((i=0 ; i < num_mandirs ; i++ )) ; do 2908462SApril.Chin@Sun.COM typeset mandir="${mandirs[i].dir}" 2918462SApril.Chin@Sun.COM typeset windexfile="${mandir}/windex" 2928462SApril.Chin@Sun.COM 2938462SApril.Chin@Sun.COM if [[ ! -r "${windexfile}" ]] ; then 2948462SApril.Chin@Sun.COM print -u2 -f $"%s: Can't open %s.\n" "${progname}" "${windexfile}" 2958462SApril.Chin@Sun.COM continue 2968462SApril.Chin@Sun.COM fi 2978462SApril.Chin@Sun.COM 2988462SApril.Chin@Sun.COM while IFS=$'\t' read name namesec title ; do 2998462SApril.Chin@Sun.COM if [[ "${name}${namesec}${title}" == ~(Fi)${manname} ]] ; then 3008462SApril.Chin@Sun.COM printf "%s\t%s\t%s\n" "${name}" "${namesec}" "${title}" 3018462SApril.Chin@Sun.COM fi 3028462SApril.Chin@Sun.COM done <"${windexfile}" 3038462SApril.Chin@Sun.COM done 3048462SApril.Chin@Sun.COM 3058462SApril.Chin@Sun.COM return 0 3068462SApril.Chin@Sun.COM} 3078462SApril.Chin@Sun.COM 3088462SApril.Chin@Sun.COMfunction usage 3098462SApril.Chin@Sun.COM{ 3108462SApril.Chin@Sun.COM OPTIND=0 3118462SApril.Chin@Sun.COM getopts -a "${progname}" "${man_usage}" OPT '-?' 3128462SApril.Chin@Sun.COM exit 2 3138462SApril.Chin@Sun.COM} 3148462SApril.Chin@Sun.COM 3158462SApril.Chin@Sun.COM# program start 3168462SApril.Chin@Sun.COMbuiltin basename 3178462SApril.Chin@Sun.COMbuiltin cat 3188462SApril.Chin@Sun.COMbuiltin date 3198462SApril.Chin@Sun.COM 3208462SApril.Chin@Sun.COMtypeset progname="$(basename "${0}")" 3218462SApril.Chin@Sun.COM 3228462SApril.Chin@Sun.COMtypeset -r man_usage=$'+ 323*10898Sroland.mainz@nrubsig.org[-?\n@(#)\$Id: shman (Roland Mainz) 2009-06-26 \$\n] 3248462SApril.Chin@Sun.COM[-author?Roland Mainz <roland.mainz@nrubsig.org>] 3258462SApril.Chin@Sun.COM[-author?Roland Mainz <roland.mainz@sun.com>] 3268462SApril.Chin@Sun.COM[+NAME?man - find and display reference manual pages] 3278462SApril.Chin@Sun.COM[+DESCRIPTION?The man command displays information from the reference 3288462SApril.Chin@Sun.COM manuals. It displays complete manual pages that you select 3298462SApril.Chin@Sun.COM by name, or one-line summaries selected either by keyword 3308462SApril.Chin@Sun.COM (-k), or by the name of an associated file (-f). If no 3318462SApril.Chin@Sun.COM manual page is located, man prints an error message.] 3328462SApril.Chin@Sun.COM[+?write me.] 3338462SApril.Chin@Sun.COM[k:keyword?Prints out one-line summaries from the windex database (table of contents) that 3348462SApril.Chin@Sun.COM contain any of the given keywords. The windex database is created using 3358462SApril.Chin@Sun.COM catman(1M).] 3368462SApril.Chin@Sun.COM[l:list?Lists all manual pages found matching name within the search path.] 3378462SApril.Chin@Sun.COM[M:mpath?Specifies an alternate search path for manual pages. path is a colon-separated 3388462SApril.Chin@Sun.COM list of directories that contain manual page directory subtrees. For example, if 3398462SApril.Chin@Sun.COM path is /usr/share/man:/usr/local/man, man searches for name in the standard 3408462SApril.Chin@Sun.COM location, and then /usr/local/man. When used with the -k or -f options, the -M 3418462SApril.Chin@Sun.COM option must appear first. Each directory in the path is assumed to contain subdirectories of the form man* or sman* , 3428462SApril.Chin@Sun.COM one for each section. This option overrides the MANPATH environment variable.]:[path] 3438462SApril.Chin@Sun.COM[s:section?Specifies sections of the manual for man to search. The directories searched for 3448462SApril.Chin@Sun.COM name are limited to those specified by section. section can be a numerical 3458462SApril.Chin@Sun.COM digit, perhaps followed by one or more letters to match the desired section of 3468462SApril.Chin@Sun.COM the manual, for example, "3libucb". Also, section can be a word, for example, 3478462SApril.Chin@Sun.COM local, new, old, public. section can also be a letter. 3488462SApril.Chin@Sun.COM To specify multiple sections, separate each section with 3498462SApril.Chin@Sun.COM a comma. This option overrides the MANPATH environment variable and the man.cf 3508462SApril.Chin@Sun.COM file. 3518462SApril.Chin@Sun.COM See Search Path below for an explanation of how man conducts its search.]:[section] 3528462SApril.Chin@Sun.COM 3538462SApril.Chin@Sun.COMname 3548462SApril.Chin@Sun.COM 3558462SApril.Chin@Sun.COM[+SEE ALSO?\bksh93\b(1), \bman\b(1)] 3568462SApril.Chin@Sun.COM' 3578462SApril.Chin@Sun.COM 3588462SApril.Chin@Sun.COMtypeset do_list=false 3598462SApril.Chin@Sun.COMtypeset do_keyword=false 3608462SApril.Chin@Sun.COM 3618462SApril.Chin@Sun.COMwhile getopts -a "${progname}" "${man_usage}" OPT ; do 3628462SApril.Chin@Sun.COM# printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|" 3638462SApril.Chin@Sun.COM case ${OPT} in 3648462SApril.Chin@Sun.COM M) MANPATH="${OPTARG}" ;; 3658462SApril.Chin@Sun.COM l) do_list=true ;; 3668462SApril.Chin@Sun.COM k) do_keyword=true ;; 3678462SApril.Chin@Sun.COM s) MANSECTS="${OPTARG}" ;; 3688462SApril.Chin@Sun.COM *) usage ;; 3698462SApril.Chin@Sun.COM esac 3708462SApril.Chin@Sun.COMdone 3718462SApril.Chin@Sun.COMshift $((OPTIND-1)) 3728462SApril.Chin@Sun.COM 3738462SApril.Chin@Sun.COM# cd /usr/man; LC_MESSAGES=C /usr/lib/sgml/sgml2roff /usr/man/sman1as/asadmin-list-timers.1as | tbl | eqn | nroff -u0 -Tlp -man - | col -x > /tmp/mpLQaqac 3748462SApril.Chin@Sun.COM 375*10898Sroland.mainz@nrubsig.org# prechecks 376*10898Sroland.mainz@nrubsig.org(( $# > 0 )) || usage 377*10898Sroland.mainz@nrubsig.org 378*10898Sroland.mainz@nrubsig.org# process arguments 379*10898Sroland.mainz@nrubsig.orgwhile (( $# > 0 )) ; do 380*10898Sroland.mainz@nrubsig.org typeset manname="$1" 381*10898Sroland.mainz@nrubsig.org shift 3828462SApril.Chin@Sun.COM 383*10898Sroland.mainz@nrubsig.org debug_print -f "# searching for %s ...\n" "${manname}" 384*10898Sroland.mainz@nrubsig.org 385*10898Sroland.mainz@nrubsig.org if ${do_keyword} ; then 386*10898Sroland.mainz@nrubsig.org list_keywords 387*10898Sroland.mainz@nrubsig.org elif ${do_list} ; then 388*10898Sroland.mainz@nrubsig.org list_manpages 389*10898Sroland.mainz@nrubsig.org else 390*10898Sroland.mainz@nrubsig.org show_manpage 391*10898Sroland.mainz@nrubsig.org fi 392*10898Sroland.mainz@nrubsig.orgdone 3938462SApril.Chin@Sun.COM 3948462SApril.Chin@Sun.COM# todo: better exit codes 3958462SApril.Chin@Sun.COMexit 0 3968462SApril.Chin@Sun.COM# EOF. 397