Annotation of lucent/sys/man/1/rc, revision 1.1.1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.