diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
| commit | 46439007cf417cbd9ac8049bb4122c890097a0fa (patch) | |
| tree | 6fdb25e5f3a2b6d5657eb23b35774b631d4d97e4 /man/1/sh-std | |
| parent | 37da2899f40661e3e9631e497da8dc59b971cbd0 (diff) | |
20060303-partial
Diffstat (limited to 'man/1/sh-std')
| -rw-r--r-- | man/1/sh-std | 557 |
1 files changed, 557 insertions, 0 deletions
diff --git a/man/1/sh-std b/man/1/sh-std new file mode 100644 index 00000000..efb650cc --- /dev/null +++ b/man/1/sh-std @@ -0,0 +1,557 @@ +.TH SH-STD 1 +.SH NAME +std, if, while, ~, no, !, apply, getlines, status, pctl, fn, and, or, raise, rescue, hd, tl, index, split, join, pid, parse, pctl, env \- standard shell builtins module. +.SH SYNOPSIS +.B load std + +.B ! +.I command +.br +.B ~ +.I value +[ +.IR pattern ... +] +.br +.B no +[ +.IR arg ... +] +.br +.B and +.IR command ... +.br +.B apply +.I command +[ +.IR arg ... +] +.br +.B getlines +[ +.I separators +] +.I command +.br +.B flag +.I f +[ +.B +- +] +.br +.B for +.I var +.B in +[ +.IR arg ... +] +.I command +.br +.B fn +.I name command +.br +.B if +.I condition action +[ +.I condition action +]... [ +.I elseaction +] +.br +.B or +.IR command ... +.br +.B pctl +.IR flag... +.br +.B raise +.I name +.br +.B rescue +.I pattern rescueblock command +.br +.B status +.I value +.br +.B subfn +.I name command +.br +.B if +[ +.I condition action +]... [ +.I elseaction +] +.br +.B while +.I condition command +.br +.B ${hd +.IB list } +.br +.B ${index +.I number +.IB list } +.br +.B ${pid} +.br +.B ${split +[ +.I separators +] +.IB arg } +.br +.B ${join +.I separator +.IB list } +.br +.B ${tl +.IB list } +.br +.B ${parse +.IB arg ] +.br +.B ${pipe +( +.B from +| +.B to +| +.I fdnum +) +.IB command } +.br +.B ${env} +.SH DESCRIPTION +.B Std +is a loadable module for +.IR sh (1) +that provides the equivalent of a +``standard library'' for the shell, including +a set of control-flow constructs and some +other miscellaneous commands. +In the following descriptions, if an argument is +executed, then it should be a braced block +suitable for executing by +.IR sh . +A true exit status is defined to be nil; +any non-nil exit status is false. +Unless otherwise stated, the return value +of a command is that of the last command that +it executed. +If invalid arguments are passed to any command, +a +.B usage +exception is raised, and a message printed to stderr. +.PP +Each of the looping commands +.BR for , +.BR apply , +.BR while , +and +.B getlines +installs an exception handler for the duration of the +loop to catch the exceptions +.B break +and +.BR continue . +If a +.B break +exception is caught, the loop is terminated; if a +.B continue +exception is caught, the loop will continue executing as +usual. +The commands are as follows: +.TP 10 +.B ! +.B ! +inverts the exit status of a command (non-null is changed to null, +null is changed to non-null). +.TP +.B ~ +.B ~ +matches +.I value +against each +.I pattern +in turn, returning true if any of them match and false otherwise. +The patterns are of the same form as those accepted by +the shell for filename pattern matching except that / is +not treated specially. (see +.IR filepat (2)). +Patterns +must be quoted to stop the shell from interpreting them. +.TP +.B no +True if there are no arguments. Useful for testing if there are any items in a list +without counting the items with +.BR $# . +.TP +.BI and +.B And +evaluates each +.I command +in turn until one returns false. +.TP +.B apply +.B Apply +evaluates +.I command +once for each +.IR arg , +passing it in the variable +.BR $1 . +.TP +.B getlines +.B Getlines +reads lines from the standard input, +executing +.I command +for each line, setting the environment variable +.B $line +to the line read, with any terminating character +removed. If +.I separators +is given, a line is terminated when any character +in +.I separators +is found; the default separator string +is a single newline character. +.TP +.B flag +Either set +.RB ( + ), +clear +.RB ( - ), +or test (neither +.B + +or +.BR - ) +the flag +.IR f , +where +.I f +is a single character, one of the +command line flags to +.I sh +(see +.IR sh (1)). +.TP +.B fn +.B Fn +defines a new builtin command named +.IR name ; +when run, this command evaluates +.IR command . +The command is stored in the environment +variable +.BI fn- name\f1;\fP +any variables of this form found when +when +.B std +is loaded will be defined in this way. +If +.I command +is not given, then the builtin will be removed. +.TP +.B subfn +.B Subfn +is similar to +.B fn +except that it defines a new substitution builtin +.IR name . +When +.I name +is invoked, it creates a new local variable +.B result +and executes +.IR command . +The value of +.B $result +when +.I command +has terminated is the value yielded by the substitution builtin +.IR name . +.I Command +is stored in and restored from the environment in a similar +way to +.BR fn , +except that +.BI sfn- name +is used as the name of the environment variable. +.TP +.B if +.B If +executes +.IR condition ; +if it returns true, then +.I action +is executed, otherwise each of the next +.IR condition - action +pairs is evaluated in the same way; if no +.I condition +is satisfied, then +.I elseaction +will be executed, if present. +.TP +.B for +.B For +is similar to +.BR apply ; +it runs +.I command +once for each +.IR arg , +but it performs a local assignment of +.I arg +to +.I var +each time. +.TP +.B or +.B Or +evaluates each +.I command +in turn until one returns true. +.TP +.B pctl +.B Pctl +is an interface to the Inferno system call +.IR sys-pctl (2); +each argument specifies one bit in the bitmask +passed to that function. The possible flags are +.BR newfd , +.BR forkfd , +.BR newns , +.BR forkns , +.BR newpgrp +and +.BR nodevs . +See +.IR sys-pctl (2) +for details of the meaning of these flags. +.B Pctl +returns true. +.TP +.B raise +.B Raise +raises the exception +.IR name ; +.I name +will be truncated if it is longer than +that allowed by +.I raise +(see +.IR sys-exception (2)). +Control will be transferred to the innermost +rescue block in the same process that +matches +.IR name . +If there is no rescue block in place, +the current process will exit, yielding +.I name +as its exit status. +If no +.I name +is given, the exception named in +.B $exception +is raised; if this is null, a +.B bad raise context +exception is raised. +The default command prompt catches all +exceptions. +.TP +.B rescue +.B Rescue +executes +.I command +with an exception handler installed for the duration +of the call. It will catch all exceptions with a name +matching +.IR pattern , +where +.I pattern +is of the same form accepted by +.I rescue +(see +.IR sys-exception (2)); +i.e. an exact match, or a prefix +followed by an asterisk +.RB ( * ) +which will match an exception starting with the prefix. +If an exception is caught, +.B rescue +executes +.IR rescueblock , +setting +.B $exception +to the name of the exception raised. +.TP +.B status +returns its first argument word as its exit status, +or nil if none is given. +.TP +.B while +.B While +repeatedly executes +.I condition +and then +.I action +until +.I condition +does not return true. +.TP +.B ${env} +.B Env +yields a list of the names of all +currently set non-nil environment variables. +.TP +.B ${hd} +.B Hd +yields the first of its arguments, or nil if there +are no arguments. +.TP +.B ${index} +.B Index +yields the +.IR n 'th +element in its argument list, indexed from 1. +.I N +must be a decimal integer. +.TP +.B ${join} +.B Join +yields a single element which is the concatenation of all +the elements in +.I list +separated by +.IR separator . +If there are no elements in +.IR list , +it yields an empty string. +The shell operator +\f5$"\f2var\f1 +is exactly equivalent to +.BI "${join ' ' $" var }\f1.\fP +.TP +.B ${parse} +.B Parse +parses +.I arg +according to the usual syntax rules, raising a +.B parse error +exception if it fails. +.I Arg +must be a well-formed command block +surrounded by braces. +.B Parse +yields a functionally equivalent version +of +.IR arg . +.TP +.B ${pid} +.B Pid +yields the process id of the current process. +.TP +.B ${pipe} +.B Pipe +runs +.I command +asynchronously, with one of its file descriptors connected +to a bidirectional pipe. The first argument to +.B pipe +determines which file descriptor is connected: if +the argument is +.BR from , +its standard output is connected; if the argument is +.BR to , +its standard input is connected; otherwise file descriptor +.I fdnum +is connected. +.B Pipe +yields the name of a file that can be opened to access +the other end of the pipe. This allows the construction +of non-linear pipelines. For example, the following runs two commands +.B old +and +.B new +and uses +.B cmp +to compare their outputs +.EX + cmp ${pipe from {old}} ${pipe from {new}} +.EE +.TP +.B ${split} +.B Split +splits +.I arg +into list elements at every point where one or +more characters in +.I separators +appear. If +.I separators +is not given, the value of +.B $ifs +is used. +.TP +.B ${tl} +.B Tl +yields all but the first of its arguments, +or nil if there are no arguments. +.SS Syntactic considerations +It is worth being aware of a few pitfalls that await the user of +some of these commands. Unlike other shells, the syntax of +.I sh +does not include the syntax of the control flow commands, +so it is important to be aware of the rules that govern +the gathering of the arguments for a command. +In particular, the following code, written to print a message +a filename ends in +.B .b +will not work: it will always print ``file is Limbo source''. +.EX + and + {~ $filename '*.b'} + {echo file is Limbo source} +.EE +This is because newlines separate shell commands, so +the above code first invokes +.B and +with no arguments, and then each of the braced block +commands on each subsequent line. +It is usual to use round brackets in order to group together arguments +on separate lines, e.g. +.EX + and ( + {~ $filename '*.b'} + {echo file is Limbo source} + ) +.EE +This has the originally intended meaning. +.SH FILES +.TF /tmp/pipes/* +.TP +.B /tmp/pipe.*d +Temporary placeholder directory for named pipes. +.TP +.B /tmp/pipes/* +Mount point for named pipes. +.SH SOURCE +.B /appl/cmd/sh/std.b +.SH SEE ALSO +.IR sh (1), +.IR sh-expr (1), +.IR sh-tk (1) +.SH BUGS +As the shell does not know about functions, +the +.B whatis +command cannot return information about +their value. Use +.BI "whatis fn-" name +to find out the current definition of a function, +or +.BI "whatis sfn-" name +to find out the current definition of a substitution function. + |
