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