|
|
1.1 root 1: .ds OK [\|
2: .ds CK \|]
3: .TH RC 1
4: .CT 1 shell proc_man dirs files
5: .SH NAME
6: rc, cd, wait, whatis \- command language
7: .SH SYNOPSIS
8: .B rc
9: [
10: .B -dilxepv
11: ]
12: [
13: .B -c command
14: ]
15: [
16: .I file
17: [
18: .I arg ...
19: ]
20: ]
21: .SH DESCRIPTION
22: .I Rc
23: is the Plan 9 shell.
24: It executes command lines read from a terminal or a file or, with the
25: .B -c
26: flag, from
27: .I rc's
28: argument list.
29: .SS Command Lines
30: A command line is a sequence of commands, separated by ampersands or semicolons
31: .RB ( &
32: or
33: .BR ; )
34: and terminated by a newline.
35: The commands are executed in sequence
36: from left to right.
37: .I Rc
38: does not wait for a command followed by
39: .B &
40: to finish executing before starting
41: the following command.
42: Whenever a command followed by
43: .B &
44: is executed, its process id is assigned to the
45: .I rc
46: variable
47: .BR $apid .
48: Whenever a command
49: .I not
50: followed by
51: .B &
52: exits normally, the low 8 bits of the argument to its
53: .IR exit (2)
54: call
55: are assigned to the
56: .I rc
57: variable
58: .BR $status .
59: If it terminates abnormally,
60: .B $status
61: has value 1000 plus the termination status provided to wait(2).
62: .PP
63: A long command line may be continued on subsequent lines by typing
64: a backslash
65: .RB ( \e )
66: followed by a newline.
67: This sequence is treated as though it were a blank.
68: Backslash is not otherwise a special character.
69: .PP
70: A number-sign
71: .RB ( # )
72: and any following characters up to (but not including) the next newline
73: are ignored, except in quotation marks.
74: .SS Simple Commands
75: A simple command is a sequence of arguments interspersed with I/O redirections.
76: If the first argument is the name of an
77: .I rc
78: function or of one of
79: .I rc's
80: built-in commands, it is executed by
81: .I rc.
82: Otherwise if the name contains a slash
83: .RB ( / ),
84: it must be the pathname of the program to be executed.
85: Names containing no slash are searched for in
86: a list of directory names stored in
87: .BR $path .
88: The first executable file of the given name found
89: in a directory in
90: .B $path
91: is the program to be executed.
92: .PP
93: The first word of a simple command cannot be a keyword unless it is
94: quoted or otherwise disguised.
95: The keywords are
96: .EX
97: for in while if not switch fn ~ ! @
98: .EE
99: .SS Arguments and Variables
100: A number of constructions may be used where
101: .I rc's
102: syntax requires an argument to appear.
103: In many cases a construction's
104: value will be a list of arguments rather than a single string.
105: .PP
106: The simplest kind of argument is the unquoted word:
107: a sequence of one or more characters none of which is a blank, tab,
108: newline or any of the following:
109: .EX
110: # ; & | ^ $ = ` ' { } ( ) < >
111: .EE
112: An unquoted word that contains any of the characters
113: .B * ?
114: or
115: .BR [ ,
116: is a pattern for matching against file names.
117: The character
118: .B *
119: matches any sequence of characters,
120: .B ?
121: matches any single character and
122: .BI [ class ]
123: matches any character in the
124: .IR class .
125: If the first character of
126: .I class
127: is
128: .BR ~ ,
129: the class is complemented.
130: The
131: .I class
132: may also contain pairs of characters separated by
133: .BR - ,
134: standing for all characters lexically between the two.
135: The character
136: .B /
137: must appear explicitly in a pattern, as must the
138: first character of the pathname components
139: .B .
140: and
141: .BR .. .
142: A pattern is replaced by a list of arguments, one for each pathname matched,
143: except that a pattern matching no names is not replaced by the empty list,
144: but rather stands for itself.
145: Pattern matching is done after all other
146: operations.
147: Thus,
148: .EX
149: x=/tmp echo $x^/*.c
150: .EE
151: matches
152: .BR /tmp/*.c ,
153: rather than matching
154: .B "/*.c
155: and then prepending
156: .BR /tmp .
157: .PP
158: A quoted word is a sequence of characters surrounded by single quotes
159: .RB ( ' ).
160: A single quote is represented in a quoted word by a pair of quotes
161: .RB ( '' ).
162: .PP
163: Each of the following is an argument.
164: .PD 0
165: .HP
166: .BI ( arguments )
167: .br
168: The value of a sequence of arguments enclosed in parentheses is
169: a list comprising the members of each element of the sequence.
170: Argument lists have no recursive structure, although their syntax may
171: suggest it.
172: The following are entirely equivalent:
173: .EX
174: echo hi there everybody
175: ((echo) (hi there) everybody)
176: .EE
177: .HP
178: .BI $ argument
179: .HP
180: .BI $ argument ( subscript )
181: .br
182: The
183: .I argument
184: after the
185: .B $
186: is the name of a variable whose value is substituted.
187: Multiple levels
188: of indirection are possible, but of questionable utility.
189: Variable values
190: are lists of strings.
191: If
192: .I argument
193: is a number
194: .IR n ,
195: the value is the
196: .IR n th
197: element of
198: .BR $* ,
199: unless
200: .B $*
201: doesn't have
202: .I n
203: elements, in which case the value is empty.
204: If
205: .I argument
206: is followed by a parenthesized list of subscripts, the
207: value substituted is a list composed of the requested elements (origin 1).
208: The parenthesis must follow the variable name with no spaces.
209: Assignments to variables are described below.
210: .HP
211: .BI $# argument
212: .br
213: The value is the number of elements in the named variable.
214: A variable
215: never assigned a value has zero elements.
216: .HP
217: .BI `{ command }
218: .br
219: .I rc
220: executes the
221: .I command
222: and reads its standard output, splitting it into a list of arguments,
223: using characters in
224: .B $ifs
225: as separators.
226: If
227: .B $ifs
228: is not otherwise set, its value is
229: .BR "'\ \et\en'" .
230: .HP
231: .BI <{ command }
232: .HP
233: .BI >{ command }
234: .br
235: The
236: .I command
237: is executed asynchronously with its standard output or standard input
238: connected to a pipe.
239: The value of the argument is the name of a file
240: referring to the other end of the pipe.
241: This allows the construction of
242: non-linear pipelines.
243: For example, the following runs two commands
244: .B old
245: and
246: .B new
247: and uses
248: .B cmp
249: to compare their outputs
250: .EX
251: cmp <{old} <{new}
252: .EE
253: This feature does not work on systems that do not support
254: .B /dev/fd
255: or its equivalent, e.g. on Sunos and System V.
256: .HP
257: .IB argument ^ argument
258: .br
259: The
260: .B ^
261: operator concatenates its two operands.
262: If the two operands
263: have the same number of components, they are concatenated pairwise.
264: If not,
265: then one operand must have one component, and the other must be non-empty,
266: and concatenation is distributive.
267: .PD
268: .SS Free Carets
269: In a most circumstances,
270: .I rc
271: will insert the
272: .B ^
273: operator automatically between words that are not separated by white space.
274: Whenever one of
275: .B $ ' `
276: follows a quoted or unquoted word or an unquoted word follows a quoted word
277: with no intervening blanks or tabs,
278: a
279: .B ^
280: is inserted between the two.
281: If an unquoted word immediately follows a
282: .BR $
283: and contains a character other than an alphanumeric, underscore,
284: or
285: .BR * ,
286: a
287: .B ^
288: is inserted before the first such character.
289: Thus
290: .IP
291: .B cc -$flags $stem.c
292: .LP
293: is equivalent to
294: .IP
295: .B cc -^$flags $stem^.c
296: .SS I/O Redirections
297: The sequence
298: .BI > file
299: redirects the standard output file (file descriptor 1, normally the
300: terminal) to the named
301: .I file;
302: .BI >> file
303: appends standard output to the file.
304: The standard input file (file descriptor 0, also normally the terminal)
305: may be redirected from a file by the sequence
306: .BI < file ,
307: or from an inline `here document'
308: by the sequence
309: .BI << eof-marker .
310: The contents of a here document are lines of text taken from the command
311: input stream up to a line containing nothing but the
312: .I eof-marker,
313: which may be either a quoted or unquoted word.
314: If
315: .I eof-marker
316: is unquoted, variable names of the form
317: .BI $ word
318: have their values substituted from
319: .I rc's
320: environment.
321: If
322: .BI $ word
323: is followed by a caret
324: .RB ( ^ ),
325: the caret is deleted.
326: If
327: .I eof-marker
328: is quoted, no substitution occurs.
329: .PP
330: Redirections may be applied to a file-descriptor other than standard input
331: or output by qualifying the redirection operator
332: with a number in square brackets.
333: For example, the diagnostic output (file descriptor 2)
334: may be redirected by writing
335: .BR "cc junk.c >[2]junk" .
336: .PP
337: A file descriptor may be redirected to an already open descriptor by writing
338: .BI >[ fd0 = fd1 ]
339: or
340: .BI <[ fd0 = fd1 ].
341: .I Fd1
342: is a previously opened file descriptor, and
343: .I fd0
344: becomes a new copy (in the sense of
345: .IR dup (2))
346: of it.
347: A file descriptor may be closed by writing
348: .BI >[ fd0 =]
349: or
350: .BI <[ fd0 =].
351: .PP
352: Redirections are executed from left to right.
353: Therefore,
354: .B cc junk.c >/dev/null >[2=1]
355: and
356: .B cc junk.c >[2=1] >/dev/null
357: have different effects \(mi the first puts standard output in
358: .BR /dev/null ,
359: and then puts diagnostic output in the same place, where the second
360: directs diagnostic output to the terminal and sends standard output to
361: .BR /dev/null .
362: .SS Compound Commands
363: A pair of commands separated by a pipe operator
364: .RB ( | )
365: is a command.
366: The standard output of the left command is sent through a pipe
367: to the standard input of the right command.
368: The pipe operator may be decorated
369: to use different file descriptors.
370: .BI |[ fd ]
371: connects the output end of the pipe to file descriptor
372: .I fd
373: rather than 1.
374: .BI |[ fd0 = fd1 ]
375: connects output to
376: .I fd0
377: of the left command and input to
378: .I fd1
379: of the right command.
380: .PP
381: A pair of commands separated by
382: .B &&
383: or
384: .B ||
385: is a command.
386: In either case, the left command is executed and its exit status examined.
387: If the operator is
388: .B &&
389: the right command is executed if the left command's status is zero.
390: .B ||
391: causes the right command to be executed if the left command's status is non-zero.
392: .PP
393: The exit status of a command may be inverted (non-zero is changed to zero, zero
394: is changed to one) by preceding it with a
395: .BR ! .
396: .PP
397: The
398: .B |
399: operator has highest precedence, and is left-associative (i.e. binds tighter
400: to the left than the right.)
401: .B !
402: has intermediate precedence, and
403: .B &&
404: and
405: .B ||
406: have the lowest precedence.
407: .PP
408: The unary
409: .B @
410: operator, with precedence equal to
411: .BR ! ,
412: causes its operand to be executed in a subshell.
413: .PP
414: Each of the following is a command.
415: .PD 0
416: .HP
417: .B if (
418: .I list
419: .B )
420: .I command
421: .br
422: A
423: .I list
424: is a sequence of commands, separated by
425: .BR & ,
426: .B ;
427: or newline.
428: It is executed and
429: if its exit status is zero, the
430: .I command
431: is executed.
432: .HP
433: .B if not
434: .I command
435: .br
436: The immediately preceding command must have been
437: .B if (
438: .I list
439: .B )
440: .IR command .
441: If its condition was non-zero, the
442: .I command
443: is executed.
444: .HP
445: .B for (
446: .I name
447: .B in
448: .I arguments
449: .B )
450: .I command
451: .HP
452: .B for (
453: .I name
454: .B )
455: .I command
456: .br
457: The
458: .I command
459: is executed once for each
460: .IR argument
461: with that argument assigned to
462: .IR name .
463: If the argument list is omitted,
464: .B $*
465: is used.
466: .HP
467: .B while (
468: .I list
469: .B )
470: .I command
471: .br
472: The
473: .I list
474: is executed repeatedly until its exit status is non-zero.
475: Each time it returns zero status, the
476: .I command
477: is executed.
478: The empty
479: .I list
480: always yields zero status.
481: .HP
482: .BI "switch(" argument "){" list }
483: .br
484: The
485: .IR list
486: is searched for simple commands beginning with the word
487: .BR case .
488: (The search is only at the `top level' of the
489: .IR list .
490: That is,
491: .BR case s
492: in nested constructs are not found.)
493: .I Argument
494: is matched against each word following
495: .B case
496: using the pattern-matching algorithm described above, except that
497: .B /
498: and the first characters of
499: .B .
500: and
501: .B ..
502: need not be matched explicitly.
503: When a match is found, commands in the list are executed up to the next
504: following
505: .B case
506: command (at the top level) or the closing parenthesis.
507: .HP
508: .BI { list }
509: .br
510: Braces serve to alter the grouping of commands implied by operator
511: priorities.
512: The
513: .I body
514: is a sequence of commands separated by
515: .BR & ,
516: .B ;
517: or newline.
518: .HP
519: .BI "fn " name { list }
520: .HP
521: .BI "fn " name
522: .br
523: The first form defines a function with the given
524: .IR name .
525: Subsequently, whenever a command whose first argument is
526: .I name
527: is encountered, the current value of
528: the remainder of the command's argument list will be assigned to
529: .BR $* ,
530: after saving its current value, and
531: .I rc
532: will execute the
533: .IR list .
534: The second form removes
535: .IR name 's
536: function definition.
537: .HP
538: .BI "fn " signal { list }
539: .br
540: .HP
541: .BI "fn " signal
542: .br
543: A function with the name of a signal, in lower case, is defined
544: in the usual way, but called when
545: .I rc
546: receives that signal; see
547: .IR signal (2).
548: By default
549: .I rc
550: exits on receiving any signal, except when run interactively,
551: in which case interrupts and quits normally cause
552: .I rc
553: to stop whatever it's doing and start reading a new command.
554: The second form causes
555: .I rc
556: to handle a signal in the default manner.
557: .I Rc
558: recognizes an artificial signal,
559: .BR sigexit ,
560: which occurs when
561: .I rc
562: is about to finish executing.
563: .HP
564: .IB name = "argument command"
565: .br
566: Any command may be preceded by a sequence of assignments
567: interspersed with redirections.
568: The assignments remain in effect until the end of the command, unless
569: the command is empty (i.e. the assignments stand alone), in which case
570: they are effective until rescinded by later assignments.
571: .PD
572: .SS Built-in Commands
573: These commands are executed internally by
574: .IR rc ,
575: usually because their execution changes or depends on
576: .IR rc 's
577: internal state.
578: .PD 0
579: .HP
580: .BI . " file ..."
581: .br
582: Execute commands from
583: .IR file .
584: .B $*
585: is set for the duration to the remainder of the argument list following
586: .IR file .
587: .I File
588: is searched for using
589: .BR $path .
590: .HP
591: .BI builtin " command ..."
592: .br
593: Execute
594: .I command
595: as usual except that any function named
596: .I command
597: is ignored.
598: .HP
599: .BI "cd [" dir "]"
600: .br
601: Change the current directory to
602: .IR dir .
603: The default argument is
604: .BR $home .
605: .I dir
606: is searched for in each of the directories mentioned in
607: .BR $cdpath .
608: .HP
609: .BI "eval [" "arg ..." "]"
610: .br
611: The arguments are concatenated separated by spaces into a single string,
612: read as input to
613: .IR rc ,
614: and executed.
615: .HP
616: .BI "exec [" "command ..." "]"
617: .br
618: .I Rc
619: replaces itself with the given (non-built-in)
620: .IR command .
621: .HP
622: .BR "exit [" status "]"
623: .br
624: Exit with the given exit status.
625: If none is given, the current value of
626: .B $status
627: is used.
628: .HP
629: .BI "shift [" n "]"
630: .br
631: Delete the first
632: .IR n
633: (default 1)
634: elements of
635: .BR $* .
636: .HP
637: .BI "umask [" octal "]"
638: .br
639: Set
640: .IR rc 's
641: file-creation mask (see
642: .IR umask (2))
643: to the given octal value.
644: If no value is given, the current
645: mask value is printed.
646: .HP
647: .BI "wait [" pid "]"
648: .br
649: Wait for the process with the given
650: .I pid
651: to exit.
652: If no
653: .I pid
654: is given, all outstanding processes are waited for.
655: .HP
656: .BI whatis " name ..."
657: .br
658: Print the value of each
659: .I name
660: in a form suitable for input to
661: .IR rc .
662: The output is
663: an assignment to any variable,
664: the definition of any function,
665: a call to
666: .B builtin
667: for any built-in command, or
668: the full path name of any binary.
669: .HP
670: .BI ~ " subject pattern ..."
671: .br
672: The
673: .I subject
674: is matched against each
675: .I pattern
676: in sequence.
677: If it matches any pattern,
678: .B $status
679: is set to zero.
680: Otherwise,
681: .B $status
682: is set to one.
683: Patterns are the same as for file name matching, except that
684: .B /
685: and the first character of
686: .B .
687: and
688: .B ..
689: need not be matched explicitly.
690: The
691: .I patterns
692: are not subjected to
693: file name matching before the
694: .B ~
695: command is executed, so they need not be enclosed in quotation marks.
696: .PD
697: .SS Environment
698: The
699: .I environment
700: is a list of strings made available to executing binaries.
701: .I Rc
702: creates an environment entry for each variable whose value is non-empty,
703: and for each function.
704: The string for a variable entry has the variable's name followed by
705: .B =
706: and its value.
707: If the value has more than one component, these
708: are separated by ctrl-a
709: .RB ( '\e001' )
710: characters.
711: The string for a function is just the
712: .I rc
713: input that defines the function.
714: .PP
715: When
716: .I rc
717: starts executing it reads variable and function definitions from its
718: environment.
719: .SS Special Variables
720: The following variables are set or used by
721: .IR rc .
722: .PD 0
723: .TP
724: .B $*
725: Set to
726: .IR rc 's
727: argument list during initialization.
728: Whenever a
729: .B .
730: command or a function is executed, the current value is saved and
731: .B $*
732: receives the new argument list.
733: The saved value is restored on completion of the
734: .B .
735: or function.
736: .TP
737: .B $apid
738: Whenever a process is started asynchronously with
739: .BR & ,
740: .B $apid
741: is set to its process id.
742: .TP
743: .B $home
744: The default directory for
745: .BR cd .
746: Initially, if
747: .B $home
748: is not set and
749: .B $HOME
750: is, then
751: .B $home
752: is set to the value of
753: .BR $HOME .
754: .TP
755: .B $ifs
756: The input field separators used in backquote substitutions.
757: If
758: .B $ifs
759: is not set in
760: .IR rc 's
761: environment, it is initialized to blank, tab and newline.
762: .TP
763: .B $path
764: The search path used to find commands and input files
765: for the
766: .B .
767: command.
768: If not set in the environment, it is initialized by
769: .BR "path=(.\ /bin\ /usr/bin)" .
770: .TP
771: .B $pid
772: Set during initialization to
773: .IR rc 's
774: process id.
775: .TP
776: .B $prompt
777: When
778: .I rc
779: is run interactively, the first component of
780: .B $prompt
781: is printed before reading each command.
782: The second component is printed whenever a newline is typed and more lines
783: are required to complete the command.
784: If not set in the environment, it is initialized by
785: .BR "prompt=('%\ '\ '\ ')" .
786: .TP
787: .B $status
788: Set to the low 8 bits of the
789: .IR exit (2)
790: argument of a normally terminating binary
791: (unless started with
792: .BR &),
793: or to 1000 plus the termination status on abnormal termination.
794: .B !
795: and
796: .B ~
797: also change
798: .BR $status .
799: Its value is used to control execution in
800: .BR && ,
801: .BR || ,
802: .B if
803: and
804: .B while
805: commands.
806: When
807: .I rc
808: exits at end-of-file of its input or on executing an
809: .B exit
810: command with no argument,
811: .B $status
812: is its exit status.
813: .PD
814: .SS Invocation
815: If
816: .I rc
817: is started with no arguments it reads commands from standard input.
818: Otherwise its first non-flag argument is the name of a file from which
819: to read commands (but see
820: .B -c
821: below).
822: Subsequent arguments become the initial value of
823: .BR $* .
824: .I Rc
825: accepts the following command-line flags.
826: .PD 0
827: .TP
828: .BI -c " string"
829: Commands are read from
830: .IR string .
831: .TP
832: .B -d
833: Debugging flag, causes
834: .I rc
835: only to catch
836: .BR SIGINT ,
837: so that
838: .B SIGQUIT
839: will cause it to dump core.
840: .TP
841: .B -e
842: Exit if
843: .B $status
844: is non-zero after executing a simple command.
845: .TP
846: .B -i
847: If
848: .B -i
849: is present, or
850: .I rc
851: is given no arguments and its standard input is a terminal,
852: it runs interactively.
853: Commands are prompted for using
854: .B $prompt
855: and
856: .B SIGINT
857: and
858: .B SIGQUIT
859: are caught and sloughed off.
860: .TP
861: .B -l
862: If
863: .B -l
864: is given or the first character of argument zero is
865: .BR - ,
866: .I rc
867: reads commands from
868: .BR $home/.rcrc ,
869: if it exists, before reading its normal input.
870: .TP
871: .B -p
872: A no-op.
873: .TP
874: .B -v
875: Echo input on file descriptor 2 as it is read.
876: .TP
877: .B -x
878: Print each simple command before executing it.
879: .PD
880: .SH BUGS
881: It's too slow and too big.
882: .br
883: There should be away to match patterns against whole lists rather than
884: just single strings.
885: .br
886: Using
887: .B ~
888: to check the value of
889: .B $status
890: changes
891: .BR $status .
892: .br
893: Functions that use here documents don't work.
894: .br
895: Environment entries for variables are kludgy for UNIX compatibility.
896: Woe betide the imported variable whose value contains a ctrl-a.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.