Blob


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