plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

rc.1 (20266B)


      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 .MR wait (3) );
     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 .MR stat (3) )
     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 Subscripts can also take the form
    212 .IB m - n
    213 or
    214 .IB m -
    215 to indicate a sequence of elements.
    216 Assignments to variables are described below.
    217 .HP
    218 .BI $# argument
    219 .br
    220 The value is the number of elements in the named variable.
    221 A variable
    222 never assigned a value has zero elements.
    223 .HP
    224 $"\c
    225 .I argument
    226 .br
    227 The value is a single string containing the components of the named variable
    228 separated by spaces.  A variable with zero elements yields the empty string.
    229 .HP
    230 .BI `{ command }
    231 .br
    232 .I rc
    233 executes the
    234 .I command
    235 and reads its standard output, splitting it into a list of arguments,
    236 using characters in
    237 .B $ifs
    238 as separators.
    239 If
    240 .B $ifs
    241 is not otherwise set, its value is
    242 .BR "'\ \et\en'" .
    243 .HP
    244 .BI <{ command }
    245 .HP
    246 .BI >{ command }
    247 .br
    248 The
    249 .I command
    250 is executed asynchronously with its standard output or standard input
    251 connected to a pipe.
    252 The value of the argument is the name of a file
    253 referring to the other end of the pipe.
    254 This allows the construction of
    255 non-linear pipelines.
    256 For example, the following runs two commands
    257 .B old
    258 and
    259 .B new
    260 and uses
    261 .B cmp
    262 to compare their outputs
    263 .EX
    264 	cmp <{old} <{new}
    265 .EE
    266 .HP
    267 .BI <>{ command }
    268 .br
    269 The
    270 .I command
    271 is executed asynchronously with its standard input and
    272 output each connected to a pipe.  The value of the argument
    273 is a pair of file names referring to the two other ends
    274 of the pipes, in the order corresponding to the symbols
    275 .B <
    276 and
    277 .B >
    278 (first the pipe connected to the command's standard output,
    279 then the pipe connected to its standard input).
    280 .HP
    281 .IB argument ^ argument
    282 .br
    283 The
    284 .B ^
    285 operator concatenates its two operands.
    286 If the two operands
    287 have the same number of components, they are concatenated pairwise.
    288 If not,
    289 then one operand must have one component, and the other must be non-empty,
    290 and concatenation is distributive.
    291 .PD
    292 .SS Free Carets
    293 .I Rc
    294 will insert the
    295 .B ^
    296 operator automatically between words that are not separated by white space.
    297 Thus
    298 .IP
    299 .B cc -$flags $stem.c
    300 .LP
    301 is equivalent to
    302 .IP
    303 .B cc -^$flags $stem^.c
    304 .SS I/O Redirections
    305 The sequence
    306 .BI > file
    307 redirects the standard output file (file descriptor 1, normally the
    308 terminal) to the named
    309 .IR file ;
    310 .BI >> file
    311 appends standard output to the file.
    312 The standard input file (file descriptor 0, also normally the terminal)
    313 may be redirected from a file by the sequence
    314 .BI < file \f1,
    315 or from an inline `here document'
    316 by the sequence
    317 .BI << eof-marker\f1.
    318 The contents of a here document are lines of text taken from the command
    319 input stream up to a line containing nothing but the
    320 .IR eof-marker ,
    321 which may be either a quoted or unquoted word.
    322 If
    323 .I eof-marker
    324 is unquoted, variable names of the form
    325 .BI $ word
    326 have their values substituted from
    327 .I rc's
    328 environment.
    329 If
    330 .BI $ word
    331 is followed by a caret
    332 .RB ( ^ ),
    333 the caret is deleted.
    334 If
    335 .I eof-marker
    336 is quoted, no substitution occurs.
    337 .PP
    338 Redirections may be applied to a file-descriptor other than standard input
    339 or output by qualifying the redirection operator
    340 with a number in square brackets.
    341 For example, the diagnostic output (file descriptor 2)
    342 may be redirected by writing
    343 .BR "cc junk.c >[2]junk" .
    344 .PP
    345 A file descriptor may be redirected to an already open descriptor by writing
    346 .BI >[ fd0 = fd1 ]
    347 or
    348 .BI <[ fd0 = fd1 ]\f1.
    349 .I Fd1
    350 is a previously opened file descriptor and
    351 .I fd0
    352 becomes a new copy (in the sense of
    353 .MR dup (3) )
    354 of it.
    355 A file descriptor may be closed by writing
    356 .BI >[ fd0 =]
    357 or
    358 .BI <[ fd0 =]\f1.
    359 .PP
    360 Redirections are executed from left to right.
    361 Therefore,
    362 .B cc junk.c >/dev/null >[2=1]
    363 and
    364 .B cc junk.c >[2=1] >/dev/null
    365 have different effects: the first puts standard output in
    366 .BR /dev/null
    367 and then puts diagnostic output in the same place, where the second
    368 directs diagnostic output to the terminal and sends standard output to
    369 .BR /dev/null .
    370 .SS Compound Commands
    371 A pair of commands separated by a pipe operator
    372 .RB ( | )
    373 is a command.
    374 The standard output of the left command is sent through a pipe
    375 to the standard input of the right command.
    376 The pipe operator may be decorated
    377 to use different file descriptors.
    378 .BI |[ fd ]
    379 connects the output end of the pipe to file descriptor
    380 .I fd
    381 rather than 1.
    382 .BI |[ fd0 = fd1 ]
    383 connects output to
    384 .I fd1
    385 of the left command and input to
    386 .I fd0
    387 of the right command.
    388 .PP
    389 A pair of commands separated by
    390 .B &&
    391 or
    392 .B ||
    393 is a command.
    394 In either case, the left command is executed and its exit status examined.
    395 If the operator is
    396 .B &&
    397 the right command is executed if the left command's status is null.
    398 .B ||
    399 causes the right command to be executed if the left command's status is non-null.
    400 .PP
    401 The exit status of a command may be inverted (non-null is changed to null, null
    402 is changed to non-null) by preceding it with a
    403 .BR ! .
    404 .PP
    405 The
    406 .B |
    407 operator has highest precedence, and is left-associative (i.e. binds tighter
    408 to the left than the right).
    409 .B !
    410 has intermediate precedence, and
    411 .B &&
    412 and
    413 .B ||
    414 have the lowest precedence.
    415 .PP
    416 The unary
    417 .B @
    418 operator, with precedence equal to
    419 .BR ! ,
    420 causes its operand to be executed in a subshell.
    421 .PP
    422 Each of the following is a command.
    423 .PD 0
    424 .HP
    425 .B if (
    426 .I list
    427 .B )
    428 .I command
    429 .br
    430 A
    431 .I list
    432 is a sequence of commands, separated by
    433 .BR & ,
    434 .BR ; ,
    435 or newline.
    436 It is executed and
    437 if its exit status is null, the
    438 .I command
    439 is executed.
    440 .HP
    441 .B if not
    442 .I command
    443 .br
    444 The immediately preceding command must have been
    445 .BI if( list )
    446 .IR command .
    447 If its condition was non-zero, the
    448 .I command
    449 is executed.
    450 .HP
    451 .BI for( name
    452 .B in
    453 .IB arguments )
    454 .I command
    455 .HP
    456 .BI for( name )
    457 .I command
    458 .br
    459 The
    460 .I command
    461 is executed once for each
    462 .IR argument
    463 with that argument assigned to
    464 .IR name .
    465 If the argument list is omitted,
    466 .B $*
    467 is used.
    468 .HP
    469 .BI while( list )
    470 .I command
    471 .br
    472 The
    473 .I list
    474 is executed repeatedly until its exit status is non-null.
    475 Each time it returns null status, the
    476 .I command
    477 is executed.
    478 An empty
    479 .I list
    480 is taken to give null 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 .B cases
    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 brace.
    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 .BR ; ,
    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 " note { list }
    539 .br
    540 .HP
    541 .BI "fn " note
    542 .br
    543 A function with a special name will be called when
    544 .I rc
    545 receives a corresponding note; see
    546 .MR notify (3) .
    547 The valid note names (and corresponding notes) are
    548 .B sighup
    549 .RB ( hangup ),
    550 .B sigint
    551 .RB ( interrupt ),
    552 .BR sigalrm
    553 .RB ( alarm ),
    554 and
    555 .B sigfpe
    556 (floating point trap).
    557 By default
    558 .I rc
    559 exits on receiving any signal, except when run interactively,
    560 in which case interrupts and quits normally cause
    561 .I rc
    562 to stop whatever it's doing and start reading a new command.
    563 The second form causes
    564 .I rc
    565 to handle a signal in the default manner.
    566 .I Rc
    567 recognizes an artificial note,
    568 .BR sigexit ,
    569 which occurs when
    570 .I rc
    571 is about to finish executing.
    572 .HP
    573 .IB name = "argument command"
    574 .br
    575 Any command may be preceded by a sequence of assignments
    576 interspersed with redirections.
    577 The assignments remain in effect until the end of the command, unless
    578 the command is empty (i.e. the assignments stand alone), in which case
    579 they are effective until rescinded by later assignments.
    580 .PD
    581 .SS Built-in Commands
    582 These commands are executed internally by
    583 .IR rc ,
    584 usually because their execution changes or depends on
    585 .IR rc 's
    586 internal state.
    587 .PD 0
    588 .HP
    589 .BI . " file ..."
    590 .br
    591 Execute commands from
    592 .IR file .
    593 .B $*
    594 is set for the duration to the remainder of the argument list following
    595 .IR file .
    596 .I File
    597 is searched for using
    598 .BR $path .
    599 .HP
    600 .BI builtin " command ..."
    601 .br
    602 Execute
    603 .I command
    604 as usual except that any function named
    605 .I command
    606 is ignored in favor of the built-in meaning.
    607 .HP
    608 .BI "cd [" dir "]"
    609 .br
    610 Change the current directory to
    611 .IR dir .
    612 The default argument is
    613 .BR $home .
    614 .I dir
    615 is searched for in each of the directories mentioned in
    616 .BR $cdpath .
    617 .HP
    618 .BI "eval [" "arg ..." "]"
    619 .br
    620 The arguments are concatenated separated by spaces into a single string,
    621 read as input to
    622 .IR rc ,
    623 and executed.
    624 .HP
    625 .BI "exec [" "command ..." "]"
    626 .br
    627 This instance of
    628 .I rc
    629 replaces itself with the given (non-built-in)
    630 .IR command .
    631 .HP
    632 .BI "flag " f " [+-]"
    633 .br
    634 Either set
    635 .RB ( + ),
    636 clear
    637 .RB ( - ),
    638 or test (neither
    639 .B +
    640 nor
    641 .BR - )
    642 the flag
    643 .IR f ,
    644 where
    645 .I f
    646 is a single character, one of the command line flags (see Invocation, below).
    647 .HP
    648 .BI "exit [" status "]"
    649 .br
    650 Exit with the given exit status.
    651 If none is given, the current value of
    652 .B $status
    653 is used.
    654 .HP
    655 .BR "rfork " [ nNeEsfFm ]
    656 .br
    657 Become a new process group using
    658 .BI rfork( flags )
    659 where
    660 .I flags
    661 is composed of the bitwise OR of the
    662 .B rfork
    663 flags specified by the option letters
    664 (see
    665 .MR fork (2) ).
    666 If no
    667 .I flags
    668 are given, they default to
    669 .BR ens .
    670 The
    671 .I flags
    672 and their meanings are:
    673 .B n
    674 is
    675 .BR RFNAMEG ;
    676 .B N
    677 is
    678 .BR RFCNAMEG ;
    679 .B e
    680 is
    681 .BR RFENVG ;
    682 .B E
    683 is
    684 .BR RFCENVG ;
    685 .B s
    686 is
    687 .BR RFNOTEG ;
    688 .B f
    689 is
    690 .BR RFFDG ;
    691 .B F
    692 is
    693 .BR RFCFDG ;
    694 and
    695 .B m
    696 is
    697 .BR RFNOMNT .
    698 .HP
    699 .BI "shift [" n "]"
    700 .br
    701 Delete the first
    702 .IR n
    703 (default 1)
    704 elements of
    705 .BR $* .
    706 .HP
    707 .BI "wait [" pid "]"
    708 .br
    709 Wait for the process with the given
    710 .I pid
    711 to exit.
    712 If no
    713 .I pid
    714 is given, all outstanding processes are waited for.
    715 .HP
    716 .BI whatis " name ..."
    717 .br
    718 Print the value of each
    719 .I name
    720 in a form suitable for input to
    721 .IR rc .
    722 The output is
    723 an assignment to any variable,
    724 the definition of any function,
    725 a call to
    726 .B builtin
    727 for any built-in command, or
    728 the completed pathname of any executable file.
    729 .HP
    730 .BI ~ " subject pattern ..."
    731 .br
    732 The
    733 .I subject
    734 is matched against each
    735 .I pattern
    736 in sequence.
    737 If it matches any pattern,
    738 .B $status
    739 is set to zero.
    740 Otherwise,
    741 .B $status
    742 is set to one.
    743 Patterns are the same as for file name matching, except that
    744 .B /
    745 and the first character of
    746 .B .
    747 and
    748 .B ..
    749 need not be matched explicitly.
    750 The
    751 .I patterns
    752 are not subjected to
    753 file name matching before the
    754 .B ~
    755 command is executed, so they need not be enclosed in quotation marks.
    756 .PD
    757 .SS Environment
    758 The
    759 .I environment
    760 is a list of strings made available to executing binaries by the
    761 kernel.
    762 .I Rc
    763 creates an environment entry for each variable whose value is non-empty,
    764 and for each function.
    765 The string for a variable entry has the variable's name followed by
    766 .B =
    767 and its value.
    768 If the value has more than one component, these
    769 are separated by SOH (001)
    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 Defaults to
    810 .B $HOME
    811 or else
    812 .LR / .
    813 .TP
    814 .B $ifs
    815 The input field separators used in backquote substitutions.
    816 If
    817 .B $ifs
    818 is not set in
    819 .IR rc 's
    820 environment, it is initialized to blank, tab and newline.
    821 .TP
    822 .B $path
    823 The search path used to find commands and input files
    824 for the
    825 .B .
    826 command.
    827 If not set in the environment, it is initialized by
    828 parsing the
    829 .B $PATH
    830 variable
    831 (as in
    832 .MR sh (1) )
    833 or by
    834 .BR "path=(.\ /bin)" .
    835 The variables
    836 .B $path
    837 and
    838 .B $PATH
    839 are maintained together: changes to one will be reflected in the other.
    840 .\" Its use is discouraged; instead use
    841 .\" .IR bind (1)
    842 .\" to build a
    843 .\" .B /bin
    844 .\" containing what's needed.
    845 .TP
    846 .B $pid
    847 Set during initialization to
    848 .IR rc 's
    849 process id.
    850 .TP
    851 .B $prompt
    852 When
    853 .I rc
    854 is run interactively, the first component of
    855 .B $prompt
    856 is printed before reading each command.
    857 The second component is printed whenever a newline is typed and more lines
    858 are required to complete the command.
    859 If not set in the environment, it is initialized by
    860 .BR "prompt=('%\ '\ '\ ')" .
    861 .TP
    862 .B $status
    863 Set to the wait message of the last-executed program.
    864 (unless started with
    865 .BR &).
    866 .B !
    867 and
    868 .B ~
    869 also change
    870 .BR $status .
    871 Its value is used to control execution in
    872 .BR && ,
    873 .BR || ,
    874 .B if
    875 and
    876 .B while
    877 commands.
    878 When
    879 .I rc
    880 exits at end-of-file of its input or on executing an
    881 .B exit
    882 command with no argument,
    883 .B $status
    884 is its exit status.
    885 .PD
    886 .SS Invocation
    887 If
    888 .I rc
    889 is started with no arguments it reads commands from standard input.
    890 Otherwise its first non-flag argument is the name of a file from which
    891 to read commands (but see
    892 .B -c
    893 below).
    894 Subsequent arguments become the initial value of
    895 .BR $* .
    896 .I Rc
    897 accepts the following command-line flags.
    898 .PD 0
    899 .TP \w'\fL-c\ \fIstring\fLXX'u
    900 .BI -c " string"
    901 Commands are read from
    902 .IR string .
    903 .TP
    904 .B -s
    905 Print out exit status after any command where the status is non-null.
    906 .TP
    907 .B -e
    908 Exit if
    909 .B $status
    910 is non-null after executing a simple command.
    911 .TP
    912 .B -i
    913 If
    914 .B -i
    915 is present, or
    916 .I rc
    917 is given no arguments and its standard input is a terminal,
    918 it runs interactively.
    919 Commands are prompted for using
    920 .BR $prompt .
    921 .TP
    922 .B -I
    923 Makes sure
    924 .I rc
    925 is not run interactively.
    926 .TP
    927 .B -l
    928 If
    929 .B -l
    930 is given or the first character of argument zero is
    931 .BR - ,
    932 .I rc
    933 reads commands from
    934 .BR $home/lib/profile ,
    935 if it exists, before reading its normal input.
    936 .TP
    937 .B -p
    938 A no-op.
    939 .TP
    940 .B -d
    941 A no-op.
    942 .TP
    943 .B -v
    944 Echo input on file descriptor 2 as it is read.
    945 .TP
    946 .B -x
    947 Print each simple command before executing it.
    948 .TP
    949 .B -r
    950 Print debugging information (internal form of commands
    951 as they are executed).
    952 .PD
    953 .SH SOURCE
    954 .B \*9/src/cmd/rc
    955 .SH "SEE ALSO"
    956 Tom Duff,
    957 ``Rc \- The Plan 9 Shell''.
    958 .SH BUGS
    959 There should be a way to match patterns against whole lists rather than
    960 just single strings.
    961 .PP
    962 Using
    963 .B ~
    964 to check the value of
    965 .B $status
    966 changes
    967 .BR $status .
    968 .PP
    969 Functions that use here documents don't work.
    970 .PP
    971 The
    972 .BI <{ command }
    973 syntax depends on the underlying operating system
    974 providing a file descriptor device tree at
    975 .BR /dev/fd .
    976 .PP
    977 Some FreeBSD installations
    978 does not provide file descriptors greater than 2
    979 in
    980 .BR /dev/fd .
    981 To fix this, add
    982 .IP
    983 .EX
    984 /fdescfs    /dev/fd    fdescfs    rw    0    0
    985 .EE
    986 .LP
    987 to
    988 .BR /etc/fstab ,
    989 and then
    990 .B mount
    991 .BR /dev/fd .
    992 (Adding the line to
    993 .B fstab
    994 ensures causes FreeBSD to mount the file system
    995 automatically at boot time.)
    996 .PP
    997 Some systems require
    998 .B \*9/bin/rc
    999 to be listed in
   1000 .B /etc/shells
   1001 before it can be used as a login shell.