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