From 09cff699a514e452eccc6420f1213967b767cb3e Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Fri, 15 Mar 2019 13:08:45 -0500 Subject: rm bin/sh usr.bin/make: utilities provided by other packages --- bin/sh/USD.doc/t2 | 971 ------------------------------------------------------ 1 file changed, 971 deletions(-) delete mode 100644 bin/sh/USD.doc/t2 (limited to 'bin/sh/USD.doc/t2') diff --git a/bin/sh/USD.doc/t2 b/bin/sh/USD.doc/t2 deleted file mode 100644 index d49747e..0000000 --- a/bin/sh/USD.doc/t2 +++ /dev/null @@ -1,971 +0,0 @@ -.\" $NetBSD: t2,v 1.3 2010/08/22 02:19:07 perry Exp $ -.\" -.\" Copyright (C) Caldera International Inc. 2001-2002. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions are -.\" met: -.\" -.\" Redistributions of source code and documentation must retain the above -.\" copyright notice, this list of conditions and the following -.\" disclaimer. -.\" -.\" Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" All advertising materials mentioning features or use of this software -.\" must display the following acknowledgment: -.\" -.\" This product includes software developed or owned by Caldera -.\" International, Inc. Neither the name of Caldera International, Inc. -.\" nor the names of other contributors may be used to endorse or promote -.\" products derived from this software without specific prior written -.\" permission. -.\" -.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA -.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -.\" DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE -.\" FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -.\" OR OTHERWISE) RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" @(#)t2 8.1 (Berkeley) 6/8/93 -.\" -.SH -2.0\ Shell\ scripts -.LP -The shell may be used to read and execute commands -contained in a file. -For example, -.DS - sh file [ args \*(ZZ ] -.DE -calls the shell to read commands from \fIfile.\fP -Such a file is called a \fIshell script.\fP -Arguments may be supplied with the call -and are referred to in \fIfile\fP -using the positional parameters -\fB$1, $2, \*(ZZ\|.\fR -.LP -For example, if the file \fIwg\fP contains -.DS - who \*(VT grep $1 -.DE -then -.DS - sh wg fred -.DE -is equivalent to -.DS - who \*(VT grep fred -.DE -.LP -UNIX files have three independent attributes, -\fIread,\fP \fIwrite\fP and \fIexecute.\fP -The UNIX command \fIchmod\fP(1) may be used -to make a file executable. -For example, -.DS - chmod +x wg -.DE -will ensure that the file \fIwg\fP has execute status. -Following this, the command -.DS - wg fred -.DE -is equivalent to -.DS - sh wg fred -.DE -This allows shell scripts and other programs -to be used interchangeably. -In either case a new process is created to -run the command. -.LP -The `\fB#\fP' character is used as a comment character by the shell. -All characters following the `#' on a line are ignored. -.LP -A typical modern system has several different shells, some with differing -command syntax, and it is desirable to specify which one should be -invoked when an executable script is invoked. -If the special comment -.DS - #!/\fIpath\fP/\fIto\fP/\fIinterpreter\fP -.DE -appears as the first line in a script, it is used to specify the -absolute pathname of the shell (or other interpreter) that should be -used to execute the file. -(Without such a line, \fB/bin/sh\fP is assumed.) -It is best if a script explicitly states -what shell it is intended for in this manner. -.LP -As well as providing names for the positional -parameters, -the number of positional parameters to a script -is available as \fB$#\|.\fP -The name of the file being executed -is available as \fB$0\|.\fP -.LP -A special shell parameter \fB$\*(ST\fP -is used to substitute for all positional parameters -except \fB$0\|.\fP -A typical use of this is to provide -some default arguments, -as in, -.DS - nroff \(miT450 \(mims $\*(ST -.DE -which simply prepends some arguments -to those already given. -(The variable \fB$@\fP also expands to ``all positional -parameters'', but is subtly different when expanded inside quotes. -See section 3.5, below.) -.SH -2.1\ Control\ flow\ -\ for -.LP -A frequent use of shell scripts is to loop -through the arguments (\fB$1, $2, \*(ZZ\fR) -executing commands once for each argument. -An example of such a script is -\fItel\fP that searches the file -\fB/usr/share/telnos\fR -that contains lines of the form -.DS - \*(ZZ - fred mh0123 - bert mh0789 - \*(ZZ -.DE -The text of \fItel\fP is -.DS - #!/bin/sh - - for i - do - grep $i /usr/share/telnos - done -.DE -The command -.DS - tel fred -.DE -prints those lines in \fB/usr/share/telnos\fR -that contain the string \fIfred\|.\fP -.DS - tel fred bert -.DE -prints those lines containing \fIfred\fP -followed by those for \fIbert.\fP -.LP -The \fBfor\fP loop notation is recognized by the shell -and has the general form -.DS - \fBfor\fR \fIname\fR \fBin\fR \fIw1 w2 \*(ZZ\fR - \fBdo\fR \fIcommand-list\fR - \fBdone\fR -.DE -A \fIcommand-list\fP is a sequence of one or more -simple commands separated or terminated by a newline or semicolon. -Furthermore, reserved words -like \fBdo\fP and \fBdone\fP are only -recognized following a newline or -semicolon. -\fIname\fP is a shell variable that is set -to the words \fIw1 w2 \*(ZZ\fR in turn each time the \fIcommand-list\fP -following \fBdo\fP -is executed. -If \fBin\fR \fIw1 w2 \*(ZZ\fR -is omitted then the loop -is executed once for each positional parameter; -that is, \fBin\fR \fI$\*(ST\fR is assumed. -.LP -Another example of the use of the \fBfor\fP -loop is the \fIcreate\fP command -whose text is -.DS - for i do >$i; done -.DE -The command -.DS - create alpha beta -.DE -ensures that two empty files -\fIalpha\fP and \fIbeta\fP exist -and are empty. -The notation \fI>file\fP may be used on its -own to create or clear the contents of a file. -Notice also that a semicolon (or newline) is required before \fBdone.\fP -.SH -2.2\ Control\ flow\ -\ case -.LP -A multiple way branch is provided for by the -\fBcase\fP notation. -For example, -.DS - case $# in - \*(Ca1) cat \*(AP$1 ;; - \*(Ca2) cat \*(AP$2 <$1 ;; - \*(Ca\*(ST) echo \'usage: append [ from ] to\' ;; - esac -.DE -is an \fIappend\fP command. -When called -with one argument as -.DS - append file -.DE -\fB$#\fP is the string \fI1\fP and -the standard input is copied onto the -end of \fIfile\fP -using the \fIcat\fP command. -.DS - append file1 file2 -.DE -appends the contents of \fIfile1\fP -onto \fIfile2.\fP -If the number of arguments supplied to -\fIappend\fP is other than 1 or 2 -then a message is printed indicating -proper usage. -.LP -The general form of the \fBcase\fP command -is -.DS - \fBcase \fIword \fBin - \*(Ca\fIpattern\|\fB)\ \fIcommand-list\fB\|;; - \*(Ca\*(ZZ - \fBesac\fR -.DE -The shell attempts to match -\fIword\fR with each \fIpattern,\fR -in the order in which the patterns -appear. -If a match is found the -associated \fIcommand-list\fP is -executed and execution -of the \fBcase\fP is complete. -Since \*(ST is the pattern that matches any -string it can be used for the default case. -.LP -A word of caution: -no check is made to ensure that only -one pattern matches -the case argument. -The first match found defines the set of commands -to be executed. -In the example below the commands following -the second \*(ST will never be executed. -.DS - case $# in - \*(Ca\*(ST) \*(ZZ ;; - \*(Ca\*(ST) \*(ZZ ;; - esac -.DE -.LP -Another example of the use of the \fBcase\fP -construction is to distinguish -between different forms -of an argument. -The following example is a fragment of a \fIcc\fP command. -.DS - for i - do case $i in - \*(DC\(mi[ocs]) \*(ZZ ;; - \*(DC\(mi\*(ST) echo "unknown flag $i" ;; - \*(DC\*(ST.c) /lib/c0 $i \*(ZZ ;; - \*(DC\*(ST) echo "unexpected argument $i" ;; - \*(DOesac - done -.DE -.LP -To allow the same commands to be associated -with more than one pattern -the \fBcase\fP command provides -for alternative patterns -separated by a \*(VT\|. -For example, -.DS - case $i in - \*(Ca\(mix\*(VT\(miy) \*(ZZ - esac -.DE -is equivalent to -.DS - case $i in - \*(Ca\(mi[xy]) \*(ZZ - esac -.DE -.LP -The usual quoting conventions apply -so that -.DS - case $i in - \*(Ca\\?) \*(ZZ -.DE -will match the character \fB?\|.\fP -.SH -2.3\ Here\ documents -.LP -The shell script \fItel\fP -in section 2.1 uses the file \fB/usr/share/telnos\fR -to supply the data -for \fIgrep.\fP -An alternative is to include this -data -within the shell script as a \fIhere\fP document, as in, -.DS - for i - do grep $i \*(HE! - \*(DO\*(ZZ - \*(DOfred mh0123 - \*(DObert mh0789 - \*(DO\*(ZZ - ! - done -.DE -In this example -the shell takes the lines between \fB\*(HE!\fR and \fB!\fR -as the standard input for \fIgrep.\fP -The string \fB!\fR is arbitrary, the document -being terminated by a line that consists -of the string following \*(HE\|. -.LP -Parameters are substituted in the document -before it is made available to \fIgrep\fP -as illustrated by the following script -called \fIedg\|.\fP -.DS - ed $3 \*(HE% - g/$1/s//$2/g - w - % -.DE -The call -.DS - edg string1 string2 file -.DE -is then equivalent to the command -.DS - ed file \*(HE% - g/string1/s//string2/g - w - % -.DE -and changes all occurrences of \fIstring1\fP -in \fIfile\fP to \fIstring2\|.\fP -Substitution can be prevented using \\ -to quote the special character \fB$\fP -as in -.DS - ed $3 \*(HE+ - 1,\\$s/$1/$2/g - w - + -.DE -(This version of \fIedg\fP is equivalent to -the first except that \fIed\fP will print -a \fB?\fR if there are no occurrences of -the string \fB$1\|.\fP) -Substitution within a \fIhere\fP document -may be prevented entirely by quoting -the terminating string, -for example, -.DS - grep $i \*(HE'end' - \*(ZZ - end -.DE -The document is presented -without modification to \fIgrep.\fP -If parameter substitution is not required -in a \fIhere\fP document this latter form -is more efficient. -.SH -2.4\ Shell\ variables\(dg -.LP -.FS -Also known as \fIenvironment variables\fB, see \fIenvironment\fB(7). -.FE -The shell -provides string-valued variables. -Variable names begin with a letter -and consist of letters, digits and -underscores. -Variables may be given values by writing, for example, -.DS - user=fred\ box=m000\ acct=mh0000 -.DE -which assigns values to the variables -\fBuser, box\fP and \fBacct.\fP -A variable may be set to the null string -by saying, for example, -.DS - null= -.DE -The value of a variable is substituted -by preceding its name with \fB$\|\fP; -for example, -.DS - echo $user -.DE -will echo \fIfred.\fP -.LP -Variables may be used interactively -to provide abbreviations for frequently -used strings. -For example, -.DS - b=/usr/fred/bin - mv pgm $b -.DE -will move the file \fIpgm\fP -from the current directory to the directory \fB/usr/fred/bin\|.\fR -A more general notation is available for parameter -(or variable) -substitution, as in, -.DS - echo ${user} -.DE -which is equivalent to -.DS - echo $user -.DE -and is used when the parameter name is -followed by a letter or digit. -For example, -.DS - tmp=/tmp/ps - ps a >${tmp}a -.DE -will direct the output of \fIps\fR -to the file \fB/tmp/psa,\fR -whereas, -.DS - ps a >$tmpa -.DE -would cause the value of the variable \fBtmpa\fP -to be substituted. -.LP -Except for \fB$?\fP the following -are set initially by the shell. -\fB$?\fP is set after executing each command. -.RS -.IP \fB$?\fP 8 -The exit status (return code) -of the last command executed -as a decimal string. -Most commands return a zero exit status -if they complete successfully, -otherwise a non-zero exit status is returned. -Testing the value of return codes is dealt with -later under \fBif\fP and \fBwhile\fP commands. -.IP \fB$#\fP 8 -The number of positional parameters -(in decimal). -Used, for example, in the \fIappend\fP command -to check the number of parameters. -.IP \fB$$\fP 8 -The process number of this shell (in decimal). -Since process numbers are unique among -all existing processes, this string is -frequently used to generate -unique -temporary file names. -For example, -.DS - ps a >/tmp/ps$$ - \*(ZZ - rm /tmp/ps$$ -.DE -.IP \fB$\|!\fP 8 -The process number of the last process -run in the background (in decimal). -.IP \fB$\(mi\fP 8 -The current shell flags, such as -\fB\(mix\fR and \fB\(miv\|.\fR -.RE -.LP -Some variables have a special meaning to the -shell and should be avoided for general -use. -.RS -.IP \fB$\s-1MAIL\s0\fP 8 -When used interactively -the shell looks at the file -specified by this variable -before it issues a prompt. -If the specified file has been modified -since it -was last looked at the shell -prints the message -\fIyou have mail\fP before prompting -for the next command. -This variable is typically set -in the file \fB.profile,\fP -in the user's login directory. -For example, -.DS - \s-1MAIL\s0=/usr/spool/mail/fred -.DE -.IP \fB$\s-1HOME\s0\fP 8 -The default argument -for the \fIcd\fP command. -The current directory is used to resolve -file name references that do not begin with -a \fB/\|,\fR -and is changed using the \fIcd\fP command. -For example, -.DS - cd /usr/fred/bin -.DE -makes the current directory \fB/usr/fred/bin\|.\fR -.DS - cat wn -.DE -will print on the terminal the file \fIwn\fP -in this directory. -The command -\fIcd\fP with no argument -is equivalent to -.DS - cd $\s-1HOME\s0 -.DE -This variable is also typically set in the -the user's login profile. -.IP \fB$\s-1PWD\s0\fP 8 -The current working directory. Set by the \fIcd\fB command. -.IP \fB$\s-1PATH\s0\fP 8 -A list of directories that contain commands (the \fIsearch path\fR\|). -Each time a command is executed by the shell -a list of directories is searched -for an executable file. -.ne 5 -If \fB$\s-1PATH\s0\fP is not set -then the current directory, -\fB/bin\fP, and \fB/usr/bin\fP are searched by default. -.ne 5 -Otherwise \fB$\s-1PATH\s0\fP consists of directory -names separated by \fB:\|.\fP -For example, -.DS - \s-1PATH\s0=\fB:\fP/usr/fred/bin\fB:\fP/bin\fB:\fP/usr/bin -.DE -specifies that the current directory -(the null string before the first \fB:\fP\|), -\fB/usr/fred/bin, /bin \fRand\fP /usr/bin\fR -are to be searched in that order. -In this way individual users -can have their own `private' commands -that are accessible independently -of the current directory. -If the command name contains a \fB/\fR then this directory search -is not used; a single attempt -is made to execute the command. -.IP \fB$\s-1PS1\s0\fP 8 -The primary shell prompt string, by default, `\fB$\ \fR'. -.IP \fB$\s-1PS2\s0\fP 8 -The shell prompt when further input is needed, -by default, `\fB>\ \fR'. -.IP \fB$\s-1IFS\s0\fP 8 -The set of characters used by \fIblank -interpretation\fR (see section 3.5). -.IP \fB$\s-1ENV\s0\fP 8 -The shell reads and executes the commands in the file -specified by this variable when it is initially started. -Unlike the \fB.profile\fP file, these commands are executed by all -shells, not just the one started at login. -(Most versions of the shell specify a filename that is used if -\s-1ENV\s0 is not explicitly set. See the manual page for your shell.) -.RE -.SH -2.5\ The\ test\ command -.LP -The \fItest\fP command, although not part of the shell, -is intended for use by shell programs. -For example, -.DS - test \(mif file -.DE -returns zero exit status if \fIfile\fP -exists and non-zero exit status otherwise. -In general \fItest\fP evaluates a predicate -and returns the result as its exit status. -Some of the more frequently used \fItest\fP -arguments are given here, see \fItest\fP(1) -for a complete specification. -.DS - test s true if the argument \fIs\fP is not the null string - test \(mif file true if \fIfile\fP exists - test \(mir file true if \fIfile\fP is readable - test \(miw file true if \fIfile\fP is writable - test \(mid file true if \fIfile\fP is a directory -.DE -The \fItest\fP command is known as `\fB[\fP' and may be invoked as -such. -For aesthetic reasons, the command ignores a close bracket `\fB]\fP' given -at the end of a command so -.DS - [ -f filename ] -.DE -and -.DS - test -f filename -.DE -are completely equivalent. -Typically, the bracket notation is used when \fItest\fP is invoked inside -shell control constructs. -.SH -2.6\ Control\ flow\ -\ while -.LP -The actions of -the \fBfor\fP loop and the \fBcase\fP -branch are determined by data available to the shell. -A \fBwhile\fP or \fBuntil\fP loop -and an \fBif then else\fP branch -are also provided whose -actions are determined by the exit status -returned by commands. -A \fBwhile\fP loop has the general form -.DS - \fBwhile\fP \fIcommand-list\*1\fP - \fBdo\fP \fIcommand-list\*2\fP - \fBdone\fP -.DE -.LP -The value tested by the \fBwhile\fP command -is the exit status of the last simple command -following \fBwhile.\fP -Each time round the loop -\fIcommand-list\*1\fP is executed; -if a zero exit status is returned then -\fIcommand-list\*2\fP -is executed; -otherwise, the loop terminates. -For example, -.DS - while [ $1 ] - do \*(ZZ - \*(DOshift - done -.DE -is equivalent to -.DS - for i - do \*(ZZ - done -.DE -\fIshift\fP is a shell command that -renames the positional parameters -\fB$2, $3, \*(ZZ\fR as \fB$1, $2, \*(ZZ\fR -and loses \fB$1\|.\fP -.LP -Another kind of use for the \fBwhile/until\fP -loop is to wait until some -external event occurs and then run -some commands. -In an \fBuntil\fP loop -the termination condition is reversed. -For example, -.DS - until [ \(mif file ] - do sleep 300; done - \fIcommands\fP -.DE -will loop until \fIfile\fP exists. -Each time round the loop it waits for -5 minutes before trying again. -(Presumably another process -will eventually create the file.) -.LP -The most recent enclosing loop may be exited with the \fBbreak\fP -command, or the rest of the body skipped and the next iteration begun -with the \fBcontinue\fP command. -.LP -The commands \fItrue\fP(1) and \fIfalse\fP(1) return 0 and non-zero -exit statuses respectively. They are sometimes of use in control flow, -e.g.: -.DS - while true - do date; sleep 5 - done -.DE -is an infinite loop that prints the date and time every five seconds. -.SH -2.7\ Control\ flow\ -\ if -.LP -Also available is a -general conditional branch -of the form, -.DS - \fBif\fP \fIcommand-list - \fBthen \fIcommand-list - \fBelse \fIcommand-list - \fBfi\fR -.DE -that tests the value returned by the last simple command -following \fBif.\fP -.LP -The \fBif\fP command may be used -in conjunction with the \fItest\fP command -to test for the existence of a file as in -.DS - if [ \(mif file ] - then \fIprocess file\fP - else \fIdo something else\fP - fi -.DE -.LP -An example of the use of \fBif, case\fP -and \fBfor\fP constructions is given in -section 2.10\|. -.LP -A multiple test \fBif\fP command -of the form -.DS - if \*(ZZ - then \*(ZZ - else if \*(ZZ - then \*(ZZ - else if \*(ZZ - \*(ZZ - fi - fi - fi -.DE -may be written using an extension of the \fBif\fP -notation as, -.DS - if \*(ZZ - then \*(ZZ - elif \*(ZZ - then \*(ZZ - elif \*(ZZ - \*(ZZ - fi -.DE -.LP -The following example is an implementation of the \fItouch\fP command -which changes the `last modified' time for a list -of files. -The command may be used in conjunction -with \fImake\fP(1) to force recompilation of a list -of files. -.DS - #!/bin/sh - - flag= - for i - do case $i in - \*(DC\(mic) flag=N ;; - \*(DC\*(ST) if [ \(mif $i ] - \*(DC then cp $i junk$$; mv junk$$ $i - \*(DC elif [ $flag ] - \*(DC then echo file \\'$i\\' does not exist - \*(DC else >$i - \*(DC fi - \*(DO esac - done -.DE -The \fB\(mic\fP flag is used in this command to -force subsequent files to be created if they do not already exist. -Otherwise, if the file does not exist, an error message is printed. -The shell variable \fIflag\fP -is set to some non-null string if the \fB\(mic\fP -argument is encountered. -The commands -.DS - cp \*(ZZ; mv \*(ZZ -.DE -copy the file and then overwrite it with the copy, -thus causing the last modified date to be updated. -.LP -The sequence -.DS - if command1 - then command2 - fi -.DE -may be written -.DS - command1 && command2 -.DE -Conversely, -.DS - command1 \*(VT\*(VT command2 -.DE -executes \fIcommand2\fP only if \fIcommand1\fP -fails. -In each case the value returned -is that of the last simple command executed. -.LP -Placing a `\fB!\fP' in front of a pipeline inverts its exit -status, almost in the manner of the C operator of the same name. -Thus: -.DS - if ! [ -d $1 ] - then - echo $1 is not a directory - fi -.DE -will print a message only if $1 is not a directory. -.SH -2.8\ Command\ grouping -.LP -Commands may be grouped in two ways, -.DS - \fB{\fI command-list\fB ; }\fR -.DE -and -.DS - \fB(\fI command-list\fB )\fR -.DE -.LP -In the first \fIcommand-list\fP is simply executed. -The second form executes \fIcommand-list\fP -as a separate process. -For example, -.DS - (cd x; rm junk ) -.DE -executes \fIrm junk\fP in the directory -\fBx\fP without changing the current -directory of the invoking shell. -.LP -The commands -.DS - cd x; rm junk -.DE -have the same effect but leave the invoking -shell in the directory \fBx.\fP -.SH -2.9\ Shell\ Functions -.LP -A function may be defined by the syntax -.DS - \fIfuncname\fP() \fB{\fI command-list\fB ; }\fR -.DE -Functions are invoked within a script as though they were separate -commands of the same name. -While they are executed, the -positional parameters \fB$1, $2, \*(ZZ\fR are temporarily set to the -arguments passed to the function. For example: -.DS - count() { - echo $2 : $# - } - - count a b c -.DE -would print `b : 3'. -.SH -2.10\ Debugging\ shell\ scripts -.LP -The shell provides two tracing mechanisms -to help when debugging shell scripts. -The first is invoked within the script -as -.DS - set \(miv -.DE -(\fBv\fP for verbose) and causes lines of the -script to be printed as they are read. -It is useful to help isolate syntax errors. -It may be invoked without modifying the script -by saying -.DS - sh \(miv \fIscript\fP \*(ZZ -.DE -where \fIscript\fP is the name of the shell script. -This flag may be used in conjunction -with the \fB\(min\fP flag which prevents -execution of subsequent commands. -(Note that saying \fIset \(min\fP at a terminal -will render the terminal useless -until an end-of-file is typed.) -.LP -The command -.DS - set \(mix -.DE -will produce an execution -trace. -Following parameter substitution -each command is printed as it is executed. -(Try these at the terminal to see -what effect they have.) -Both flags may be turned off by saying -.DS - set \(mi -.DE -and the current setting of the shell flags is available as \fB$\(mi\|\fR. -.SH -2.11\ The\ man\ command -.LP -The following is a simple implementation of the \fIman\fP command, -which is used to display sections of the UNIX manual on your terminal. -It is called, for example, as -.DS - man sh - man \(mit ed - man 2 fork -.DE -In the first the manual section for \fIsh\fP -is displayed.. -Since no section is specified, section 1 is used. -The second example will typeset (\fB\(mit\fP option) -the manual section for \fIed.\fP -The last prints the \fIfork\fP manual page -from section 2, which covers system calls. -.sp 2 -.DS - #!/bin/sh - - cd /usr/share/man - - # "#" is the comment character - # default is nroff ($N), section 1 ($s) - N=n\ s=1 - - for i - do case $i in -.sp .5 - \*(DC[1\(mi9]\*(ST) s=$i ;; -.sp .5 - \*(DC\(mit) N=t ;; -.sp .5 - \*(DC\(min) N=n ;; -.sp .5 - \*(DC\(mi\*(ST) echo unknown flag \\'$i\\' ;; -.sp .5 - \*(DC\*(ST) if [ \(mif man$s/$i.$s ] - \*(DC then - \*(DC ${N}roff \(miman man$s/$i.$s - \*(DC else # look through all manual sections - \*(DC found=no - \*(DC for j in 1 2 3 4 5 6 7 8 9 - \*(DC do - \*(DC \*(DOif [ \(mif man$j/$i.$j ] - \*(DC \*(DOthen - \*(DC \*(DO\*(THman $j $i - \*(DC \*(DO\*(THfound=yes - \*(DC \*(DO\*(THbreak - \*(DC \*(DOfi - \*(DC done - \*(DC case $found in - \*(DC \*(Cano) echo \\'$i: manual page not found\\' - \*(DC esac - \*(DC fi - \*(DOesac - done -.DE -.ce -.ft B -Figure 1. A version of the man command -.ft R -- cgit v1.2.3-60-g2f50