|
|
1.1 root 1: .de sh
2: .br
3: .ne 5
4: .PP
5: \fB\\$1\fR
6: .PP
7: ..
8: .if n .ds ua \o'^|'
9: .if t .ds ua \(ua
10: .if n .ds aa '
11: .if t .ds aa \(aa
12: .if n .ds ga `
13: .if t .ds ga \(ga
14: .if t .tr *\(**
15: .TH CSH 1 "18 July 1983"
16: .UC 4
17: .SH NAME
18: csh \- a shell (command interpreter) with C-like syntax
19: .SH SYNOPSIS
20: .B csh
21: [
22: .B \-cef\^instvVxX
23: ] [
24: arg ...
25: ]
26: .SH DESCRIPTION
27: .I Csh
28: is a first implementation of a command language interpreter
29: incorporating a history mechanism (see
30: .B "History Substitutions)"
31: job control facilities (see
32: .B Jobs)
33: and a C-like syntax.
34: So as to be able to use its job control facilities, users of
35: .I csh
36: must (and automatically) use the new tty driver fully described in
37: .IR tty (4).
38: This new tty driver allows generation of interrupt characters
39: from the keyboard to tell jobs to stop. See
40: .IR stty (1)
41: for details on setting options in the new tty driver.
42: .PP
43: An instance of
44: .I csh
45: begins by executing commands from the file `.cshrc' in the
46: .I home
47: directory of the invoker.
48: If this is a login shell then it also executes commands from the file
49: `.login' there.
50: It is typical for users on crt's to put the command ``stty crt'' in their
51: .I \&.login
52: file, and to also invoke
53: .IR tset (1)
54: there.
55: .PP
56: In the normal case, the shell will then begin reading commands from the
57: terminal, prompting with `% '.
58: Processing of arguments and the use of the shell to process files
59: containing command scripts will be described later.
60: .PP
61: The shell then repeatedly performs the following actions:
62: a line of command input is read and broken into
63: .IR words .
64: This sequence of words is placed on the command history list and then parsed.
65: Finally each command in the current line is executed.
66: .PP
67: When a login shell terminates it executes commands from the file `.logout'
68: in the users home directory.
69: .sh "Lexical structure"
70: The shell splits input lines into words at blanks and tabs with the
71: following exceptions.
72: The characters
73: `&' `|' `;' `<' `>' `(' `)'
74: form separate words.
75: If doubled in `&&', `|\|\||', `<<' or `>>' these pairs form single words.
76: These parser metacharacters may be made part of other words, or prevented their
77: special meaning, by preceding them with `\e'.
78: A newline preceded by a `\e' is equivalent to a blank.
79: .PP
80: In addition strings enclosed in matched pairs of quotations,
81: `\*(aa', `\*(ga' or `"',
82: form parts of a word; metacharacters in these strings, including blanks
83: and tabs, do not form separate words.
84: These quotations have semantics to be described subsequently.
85: Within pairs of `\'' or `"' characters a newline preceded by a `\e' gives
86: a true newline character.
87: .PP
88: When the shell's input is not a terminal,
89: the character `#' introduces a comment which continues to the end of the
90: input line.
91: It is prevented this special meaning when preceded by `\e'
92: and in quotations using `\`', `\'', and `"'.
93: .sh "Commands"
94: A simple command is a sequence of words, the first of which
95: specifies the command to be executed.
96: A simple command or
97: a sequence of simple commands separated by `|' characters
98: forms a pipeline.
99: The output of each command in a pipeline is connected to the input of the next.
100: Sequences of pipelines may be separated by `;', and are then executed
101: sequentially.
102: A sequence of pipelines may be executed without immediately
103: waiting for it to terminate by following it with an `&'.
104: .PP
105: Any of the above may be placed in `(' `)' to form a simple command (which
106: may be a component of a pipeline, etc.)
107: It is also possible to separate pipelines with `|\|\||' or `&&' indicating,
108: as in the C language,
109: that the second is to be executed only if the first fails or succeeds
110: respectively. (See
111: .I Expressions.)
112: .sh "Jobs"
113: The shell associates a \fIjob\fR with each pipeline. It keeps
114: a table of current jobs, printed by the
115: \fIjobs\fR command, and assigns them small integer numbers. When
116: a job is started asynchronously with `&', the shell prints a line which looks
117: like:
118: .PP
119: .DT
120: [1] 1234
121: .PP
122: indicating that the jobs which was started asynchronously was job number
123: 1 and had one (top-level) process, whose process id was 1234.
124: .PP
125: If you are running a job and wish to do something else you may hit the key
126: \fB^Z\fR (control-Z) which sends a STOP signal to the current job.
127: The shell will then normally indicate that the job has been `Stopped',
128: and print another prompt. You can then manipulate the state of this job,
129: putting it in the background with the \fIbg\fR command, or run some other
130: commands and then eventually bring the job back into the foreground with
131: the foreground command \fIfg\fR. A \fB^Z\fR takes effect immediately and
132: is like an interrupt in that pending output and unread input are discarded
133: when it is typed. There is another special key \fB^Y\fR which does
134: not generate a STOP signal until a program attempts to
135: .IR read (2)
136: it.
137: This can usefully be typed ahead when you have prepared some commands
138: for a job which you wish to stop after it has read them.
139: .PP
140: A job being run in the background will stop if it tries to read
141: from the terminal. Background jobs are normally allowed to produce output,
142: but this can be disabled by giving the command ``stty tostop''.
143: If you set this
144: tty option, then background jobs will stop when they try to produce
145: output like they do when they try to read input.
146: .PP
147: There are several ways to refer to jobs in the shell. The character
148: `%' introduces a job name. If you wish to refer to job number 1, you can
149: name it as `%1'. Just naming a job brings it to the foreground; thus
150: `%1' is a synonym for `fg %1', bringing job 1 back into the foreground.
151: Similarly saying `%1 &' resumes job 1 in the background.
152: Jobs can also be named by prefixes of the string typed in to start them,
153: if these prefixes are unambiguous, thus `%ex' would normally restart
154: a suspended
155: .IR ex (1)
156: job, if there were only one suspended job whose name began with
157: the string `ex'. It is also possible to say `%?string'
158: which specifies a job whose text contains
159: .I string,
160: if there is only one such job.
161: .PP
162: The shell maintains a notion of the current and previous jobs.
163: In output pertaining to jobs, the current job is marked with a `+'
164: and the previous job with a `\-'. The abbreviation `%+' refers
165: to the current job and `%\-' refers to the previous job. For close
166: analogy with the syntax of the
167: .I history
168: mechanism (described below),
169: `%%' is also a synonym for the current job.
170: .sh "Status reporting"
171: This shell learns immediately whenever a process changes state.
172: It normally informs you whenever a job becomes blocked so that
173: no further progress is possible, but only just before it prints
174: a prompt. This is done so that it does not otherwise disturb your work.
175: If, however, you set the shell variable
176: .I notify,
177: the shell will notify you immediately of changes of status in background
178: jobs.
179: There is also a shell command
180: .I notify
181: which marks a single process so that its status changes will be immediately
182: reported. By default
183: .I notify
184: marks the current process;
185: simply say `notify' after starting a background job to mark it.
186: .PP
187: When you try to leave the shell while jobs are stopped, you will
188: be warned that `You have stopped jobs.' You may use the \fIjobs\fR
189: command to see what they are. If you do this or immediately try to
190: exit again, the shell will not warn you a second time, and the suspended
191: jobs will be terminated.
192: .sh Substitutions
193: We now describe the various transformations the shell performs on the
194: input in the order in which they occur.
195: .sh "History substitutions"
196: History substitutions place words from previous command input as portions
197: of new commands, making it easy to repeat commands, repeat arguments
198: of a previous command in the current command, or fix spelling mistakes
199: in the previous command with little typing and a high degree of confidence.
200: History substitutions begin with the character `!' and may begin
201: .B anywhere
202: in the input stream (with the proviso that they
203: .B "do not"
204: nest.)
205: This `!' may be preceded by an `\e' to prevent its special meaning; for
206: convenience, a `!' is passed unchanged when it is followed by a blank,
207: tab, newline, `=' or `('.
208: (History substitutions also occur when an input line begins with `\*(ua'.
209: This special abbreviation will be described later.)
210: Any input line which contains history substitution is echoed on the terminal
211: before it is executed as it could have been typed without history substitution.
212: .PP
213: Commands input from the terminal which consist of one or more words
214: are saved on the history list.
215: The history substitutions reintroduce sequences of words from these
216: saved commands into the input stream.
217: The size of which is controlled by the
218: .I history
219: variable; the previous command is always retained, regardless of its value.
220: Commands are numbered sequentially from 1.
221: .PP
222: For definiteness, consider the following output from the
223: .I history
224: command:
225: .PP
226: .DT
227: .br
228: \09 write michael
229: .br
230: 10 ex write.c
231: .br
232: 11 cat oldwrite.c
233: .br
234: 12 diff *write.c
235: .PP
236: The commands are shown with their event numbers.
237: It is not usually necessary to use event numbers, but the current event
238: number can be made part of the
239: .I prompt
240: by placing an `!' in the prompt string.
241: .PP
242: With the current event 13 we can refer to previous events by event
243: number `!11', relatively as in `!\-2' (referring to the same event),
244: by a prefix of a command word
245: as in `!d' for event 12 or `!wri' for event 9, or by a string contained in
246: a word in the command as in `!?mic?' also referring to event 9.
247: These forms, without further modification, simply reintroduce the words
248: of the specified events, each separated by a single blank.
249: As a special case `!!' refers to the previous command; thus `!!'
250: alone is essentially a
251: .I redo.
252: .PP
253: To select words from an event we can follow the event specification by
254: a `:' and a designator for the desired words.
255: The words of a input line are numbered from 0,
256: the first (usually command) word being 0, the second word (first argument)
257: being 1, etc.
258: The basic word designators are:
259: .PP
260: .DT
261: .nf
262: 0 first (command) word
263: \fIn\fR \fIn\fR\|'th argument
264: \*(ua first argument, i.e. `1'
265: $ last argument
266: % word matched by (immediately preceding) ?\fIs\fR\|? search
267: \fIx\fR\|\-\fIy\fR range of words
268: \-\fIy\fR abbreviates `0\-\fIy\fR\|'
269: * abbreviates `\*(ua\-$', or nothing if only 1 word in event
270: \fIx\fR\|* abbreviates `\fIx\fR\|\-$'
271: \fIx\fR\|\- like `\fIx\fR\|*' but omitting word `$'
272: .fi
273: .PP
274: The `:' separating the event specification from the word designator
275: can be omitted if the argument selector begins with a `\*(ua', `$', `*'
276: `\-' or `%'.
277: After the optional word designator can be
278: placed a sequence of modifiers, each preceded by a `:'.
279: The following modifiers are defined:
280: .ta .5i 1.2i
281: .PP
282: .nf
283: h Remove a trailing pathname component, leaving the head.
284: r Remove a trailing `.xxx' component, leaving the root name.
285: e Remove all but the extension `.xxx' part.
286: s/\fIl\fR\|/\fIr\fR\|/ Substitute \fIl\fR for \fIr\fR
287: t Remove all leading pathname components, leaving the tail.
288: & Repeat the previous substitution.
289: g Apply the change globally, prefixing the above, e.g. `g&'.
290: p Print the new command but do not execute it.
291: q Quote the substituted words, preventing further substitutions.
292: x Like q, but break into words at blanks, tabs and newlines.
293: .fi
294: .PP
295: Unless preceded by a `g' the modification is applied only to the first
296: modifiable word. With substitutions, it is an error for no word to be
297: applicable.
298: .PP
299: The left hand side of substitutions are not regular expressions in the sense
300: of the editors, but rather strings.
301: Any character may be used as the delimiter in place of `/';
302: a `\e' quotes the delimiter into the
303: .IR l ""
304: and
305: .IR r ""
306: strings.
307: The character `&' in the right hand side is replaced by the text from
308: the left.
309: A `\e' quotes `&' also.
310: A null
311: .IR l ""
312: uses the previous string either from a
313: .IR l ""
314: or from a
315: contextual scan string
316: .IR s ""
317: in `!?\fIs\fR\|?'.
318: The trailing delimiter in the substitution may be omitted if a newline
319: follows immediately as may the trailing `?' in a contextual scan.
320: .PP
321: A history reference may be given without an event specification, e.g. `!$'.
322: In this case the reference is to the previous command unless a previous
323: history reference occurred on the same line in which case this form repeats
324: the previous reference.
325: Thus `!?foo?\*(ua !$' gives the first and last arguments
326: from the command matching `?foo?'.
327: .PP
328: A special abbreviation of a history reference occurs when the first
329: non-blank character of an input line is a `\*(ua'.
330: This is equivalent to `!:s\*(ua' providing a convenient shorthand for substitutions
331: on the text of the previous line.
332: Thus `\*(ualb\*(ualib' fixes the spelling of
333: `lib'
334: in the previous command.
335: Finally, a history substitution may be surrounded with `{' and `}'
336: if necessary to insulate it from the characters which follow.
337: Thus, after `ls \-ld ~paul' we might do `!{l}a' to do `ls \-ld ~paula',
338: while `!la' would look for a command starting `la'.
339: .PP
340: .if n .ul
341: \fBQuotations\ with\ \'\ and\ "\fR
342: .PP
343: The quotation of strings by `\'' and `"' can be used
344: to prevent all or some of the remaining substitutions.
345: Strings enclosed in `\'' are prevented any further interpretation.
346: Strings enclosed in `"' may be expanded as described below.
347: .PP
348: In both cases the resulting text becomes (all or part of) a single word;
349: only in one special case (see
350: .I "Command Substitition"
351: below) does a `"' quoted string yield parts of more than one word;
352: `\'' quoted strings never do.
353: .sh "Alias substitution"
354: The shell maintains a list of aliases which can be established, displayed
355: and modified by the
356: .I alias
357: and
358: .I unalias
359: commands.
360: After a command line is scanned, it is parsed into distinct commands and
361: the first word of each command, left-to-right, is checked to see if it
362: has an alias.
363: If it does, then the text which is the alias for that command is reread
364: with the history mechanism available
365: as though that command were the previous input line.
366: The resulting words replace the
367: command and argument list.
368: If no reference is made to the history list, then the argument list is
369: left unchanged.
370: .PP
371: Thus if the alias for `ls' is `ls \-l' the command `ls /usr' would map to
372: `ls \-l /usr', the argument list here being undisturbed.
373: Similarly if the alias for `lookup' was `grep !\*(ua /etc/passwd' then
374: `lookup bill' would map to `grep bill /etc/passwd'.
375: .PP
376: If an alias is found, the word transformation of the input text
377: is performed and the aliasing process begins again on the reformed input line.
378: Looping is prevented if the first word of the new text is the same as the old
379: by flagging it to prevent further aliasing.
380: Other loops are detected and cause an error.
381: .PP
382: Note that the mechanism allows aliases to introduce parser metasyntax.
383: Thus we can `alias print \'pr \e!* \||\| lpr\'' to make a command which
384: .I pr's
385: its arguments to the line printer.
386: .sh "Variable substitution"
387: The shell maintains a set of variables, each of which has as value a list
388: of zero or more words.
389: Some of these variables are set by the shell or referred to by it.
390: For instance, the
391: .I argv
392: variable is an image of the shell's argument list, and words of this
393: variable's value are referred to in special ways.
394: .PP
395: The values of variables may be displayed and changed by using the
396: .I set
397: and
398: .I unset
399: commands.
400: Of the variables referred to by the shell a number are toggles;
401: the shell does not care what their value is,
402: only whether they are set or not.
403: For instance, the
404: .I verbose
405: variable is a toggle which causes command input to be echoed.
406: The setting of this variable results from the
407: .B \-v
408: command line option.
409: .PP
410: Other operations treat variables numerically.
411: The `@' command permits numeric calculations to be performed and the result
412: assigned to a variable.
413: Variable values are, however, always represented as (zero or more) strings.
414: For the purposes of numeric operations, the null string is considered to be
415: zero, and the second and subsequent words of multiword values are ignored.
416: .PP
417: After the input line is aliased and parsed, and before each command
418: is executed, variable substitution
419: is performed keyed by `$' characters.
420: This expansion can be prevented by preceding the `$' with a `\e' except
421: within `"'s where it
422: .B always
423: occurs, and within `\''s where it
424: .B never
425: occurs.
426: Strings quoted by `\*(ga' are interpreted later (see
427: .I "Command substitution"
428: below) so `$' substitution does not occur there until later, if at all.
429: A `$' is passed unchanged if followed by a blank, tab, or end-of-line.
430: .PP
431: Input/output redirections are recognized before variable expansion,
432: and are variable expanded separately.
433: Otherwise, the command name and entire argument list are expanded together.
434: It is thus possible for the first (command) word to this point to generate
435: more than one word, the first of which becomes the command name,
436: and the rest of which become arguments.
437: .PP
438: Unless enclosed in `"' or given the `:q' modifier the results of variable
439: substitution may eventually be command and filename substituted.
440: Within `"' a variable whose value consists of multiple words expands to a
441: (portion of) a single word, with the words of the variables value
442: separated by blanks.
443: When the `:q' modifier is applied to a substitution
444: the variable will expand to multiple words with each word separated
445: by a blank and quoted to prevent later command or filename substitution.
446: .PP
447: The following metasequences are provided for introducing variable values into
448: the shell input.
449: Except as noted, it is an error to reference a variable which is not set.
450: .HP 5
451: $name
452: .br
453: .ns
454: .HP 5
455: ${name}
456: .br
457: Are replaced by the words of the value of variable
458: .I name,
459: each separated by a blank.
460: Braces insulate
461: .I name
462: from following characters which would otherwise be part of it.
463: Shell variables have names consisting of up to 20 letters and digits
464: starting with a letter. The underscore character is considered a letter.
465: .br
466: If
467: .I name
468: is not a shell variable, but is set in the environment, then
469: that value is returned (but \fB:\fR modifiers and the other forms
470: given below are not available in this case).
471: .HP 5
472: $name[selector]
473: .br
474: .ns
475: .HP 5
476: ${name[selector]}
477: .br
478: May be used to select only some of the words from the value of
479: .I name.
480: The selector is subjected to `$' substitution and may consist of a single
481: number or two numbers separated by a `\-'.
482: The first word of a variables value is numbered `1'.
483: If the first number of a range is omitted it defaults to `1'.
484: If the last member of a range is omitted it defaults to `$#name'.
485: The selector `*' selects all words.
486: It is not an error for a range to be empty if the second argument is omitted
487: or in range.
488: .HP 5
489: $#name
490: .br
491: .ns
492: .HP 5
493: ${#name}
494: .br
495: Gives the number of words in the variable.
496: This is useful for later use in a `[selector]'.
497: .HP 5
498: $0
499: .br
500: Substitutes the name of the file from which command input is being read.
501: An error occurs if the name is not known.
502: .HP 5
503: $number
504: .br
505: .ns
506: .HP 5
507: ${number}
508: .br
509: Equivalent to `$argv[number]'.
510: .HP 5
511: $*
512: .br
513: Equivalent to `$argv[*]'.
514: .PP
515: The modifiers `:h', `:t', `:r', `:q' and `:x' may be applied to
516: the substitutions above as may `:gh', `:gt' and `:gr'.
517: If braces `{' '}' appear in the command form then the modifiers
518: must appear within the braces.
519: .B "The current implementation allows only one `:' modifier on each `$' expansion."
520: .PP
521: The following substitutions may not be modified with `:' modifiers.
522: .HP 5
523: $?name
524: .br
525: .ns
526: .HP 5
527: ${?name}
528: .br
529: Substitutes the string `1' if name is set, `0' if it is not.
530: .HP 5
531: $?0
532: .br
533: Substitutes `1' if the current input filename is known, `0' if it is not.
534: .HP 5
535: $$
536: .br
537: Substitute the (decimal) process number of the (parent) shell.
538: .HP 5
539: $<
540: .br
541: Substitutes a line from the standard
542: input, with no further interpretation thereafter. It can be used
543: to read from the keyboard in a shell script.
544: .sh "Command and filename substitution"
545: The remaining substitutions, command and filename substitution,
546: are applied selectively to the arguments of builtin commands.
547: This means that portions of expressions which are not evaluated are
548: not subjected to these expansions.
549: For commands which are not internal to the shell, the command
550: name is substituted separately from the argument list.
551: This occurs very late,
552: after input-output redirection is performed, and in a child
553: of the main shell.
554: .sh "Command substitution"
555: Command substitution is indicated by a command enclosed in `\*(ga'.
556: The output from such a command is normally broken into separate words
557: at blanks, tabs and newlines, with null words being discarded,
558: this text then replacing the original string.
559: Within `"'s, only newlines force new words; blanks and tabs are preserved.
560: .PP
561: In any case, the single final newline does not force a new word.
562: Note that it is thus possible for a command substitution to yield
563: only part of a word, even if the command outputs a complete line.
564: .sh "Filename substitution"
565: If a word contains any of the characters `*', `?', `[' or `{'
566: or begins with the character `~', then that word is a candidate for
567: filename substitution, also known as `globbing'.
568: This word is then regarded as a pattern, and replaced with an alphabetically
569: sorted list of file names which match the pattern.
570: In a list of words specifying filename substitution it is an error for
571: no pattern to match an existing file name, but it is not required
572: for each pattern to match.
573: Only the metacharacters `*', `?' and `[' imply pattern matching,
574: the characters `~' and `{' being more akin to abbreviations.
575: .PP
576: In matching filenames, the character `.' at the beginning of a filename
577: or immediately following a `/', as well as the character `/' must
578: be matched explicitly.
579: The character `*' matches any string of characters, including the null
580: string.
581: The character `?' matches any single character.
582: The sequence `[...]' matches any one of the characters enclosed.
583: Within `[...]',
584: a pair of characters separated by `\-' matches any character lexically between
585: the two.
586: .PP
587: The character `~' at the beginning of a filename is used to refer to home
588: directories.
589: Standing alone, i.e. `~' it expands to the invokers home directory as reflected
590: in the value of the variable
591: .I home.
592: When followed by a name consisting of letters, digits and `\-' characters
593: the shell searches for a user with that name and substitutes their
594: home directory; thus `~ken' might expand to `/usr/ken' and `~ken/chmach'
595: to `/usr/ken/chmach'.
596: If the character `~' is followed by a character other than a letter or `/'
597: or appears not at the beginning of a word,
598: it is left undisturbed.
599: .PP
600: The metanotation `a{b,c,d}e' is a shorthand for `abe ace ade'.
601: Left to right order is preserved, with results of matches being sorted
602: separately at a low level to preserve this order.
603: This construct may be nested.
604: Thus `~source/s1/{oldls,ls}.c' expands to
605: `/usr/source/s1/oldls.c /usr/source/s1/ls.c'
606: whether or not these files exist without any chance of error
607: if the home directory for `source' is `/usr/source'.
608: Similarly `../{memo,*box}' might expand to `../memo ../box ../mbox'.
609: (Note that `memo' was not sorted with the results of matching `*box'.)
610: As a special case `{', `}' and `{}' are passed undisturbed.
611: .sh Input/output
612: The standard input and standard output of a command may be redirected
613: with the following syntax:
614: .HP 5
615: < name
616: .br
617: Open file
618: .I name
619: (which is first variable, command and filename expanded) as the standard
620: input.
621: .HP 5
622: << word
623: .br
624: Read the shell input up to a line which is identical to
625: .I word.
626: .I Word
627: is not subjected to variable, filename or command substitution,
628: and each input line is compared to
629: .I word
630: before any substitutions are done on this input line.
631: Unless a quoting `\e', `"', `\*(aa' or `\*(ga' appears in
632: .I word
633: variable and command substitution is performed on the intervening lines,
634: allowing `\e' to quote `$', `\e' and `\*(ga'.
635: Commands which are substituted have all blanks, tabs, and newlines
636: preserved, except for the final newline which is dropped.
637: The resultant text is placed in an anonymous temporary file which
638: is given to the command as standard input.
639: .HP 5
640: > name
641: .br
642: .ns
643: .HP 5
644: >! name
645: .br
646: .ns
647: .HP 5
648: >& name
649: .br
650: .ns
651: .HP 5
652: >&! name
653: .br
654: The file
655: .I name
656: is used as standard output.
657: If the file does not exist then it is created;
658: if the file exists, its is truncated, its previous contents being lost.
659: .IP
660: If the variable
661: .I noclobber
662: is set, then the file must not exist or be a character special file (e.g. a
663: terminal or `/dev/null') or an error results.
664: This helps prevent accidental destruction of files.
665: In this case the `!' forms can be used and suppress this check.
666: .IP
667: The forms involving `&' route the diagnostic output into the specified
668: file as well as the standard output.
669: .I Name
670: is expanded in the same way as `<' input filenames are.
671: .HP 5
672: >> name
673: .br
674: .ns
675: .HP 5
676: >>& name
677: .br
678: .ns
679: .HP 5
680: >>! name
681: .br
682: .ns
683: .HP 5
684: >>&! name
685: .br
686: Uses file
687: .I name
688: as standard output like `>' but places output at the end of the file.
689: If the variable
690: .I noclobber
691: is set, then it is an error for the file not to exist unless
692: one of the `!' forms is given.
693: Otherwise similar to `>'.
694: .PP
695: A command receives the environment in which the shell was
696: invoked as modified by the input-output parameters and
697: the presence of the command in a pipeline.
698: Thus, unlike some previous shells, commands run from a file of shell commands
699: have no access to the text of the commands by default; rather
700: they receive the original standard input of the shell.
701: The `<<' mechanism should be used to present inline data.
702: This permits shell command scripts to function as components of pipelines
703: and allows the shell to block read its input.
704: Note that the default standard input for a command run detached is
705: .B not
706: modified to be the empty file `/dev/null'; rather the standard input
707: remains as the original standard input of the shell. If this is a terminal
708: and if the process attempts to read from the terminal, then the process
709: will block and the user will be notified (see
710: .B Jobs
711: above.)
712: .PP
713: Diagnostic output may be directed through a pipe with the standard output.
714: Simply use the form `|\|&' rather than just `|'.
715: .sh Expressions
716: A number of the builtin commands (to be described subsequently)
717: take expressions, in which the operators are similar to those of C, with
718: the same precedence.
719: These expressions appear in the
720: .I @,
721: .I exit,
722: .I if,
723: and
724: .I while
725: commands.
726: The following operators are available:
727: .DT
728: .PP
729: |\|\|| && | \*(ua & == != =~ !~ <= >= < > << >> + \- * / % ! ~ ( )
730: .PP
731: Here the precedence increases to the right,
732: `==' `!=' `=~' and `!~', `<=' `>=' `<' and `>', `<<' and `>>', `+' and `\-',
733: `*' `/' and `%' being, in groups, at the same level.
734: The `==' `!=' `=~' and `!~' operators compare their arguments as strings;
735: all others operate on numbers.
736: The operators `=~' and `!~' are like `!=' and `==' except that the right
737: hand side is a
738: .I pattern
739: (containing, e.g. `*'s, `?'s and instances of `[...]')
740: against which the left hand operand is matched. This reduces the
741: need for use of the
742: .I switch
743: statement in shell scripts when all that is really needed is pattern matching.
744: .PP
745: Strings which begin with `0' are considered octal numbers.
746: Null or missing arguments are considered `0'.
747: The result of all expressions are strings,
748: which represent decimal numbers.
749: It is important to note that no two components of an expression can appear
750: in the same word; except when adjacent to components of expressions which
751: are syntactically significant to the parser (`&' `|' `<' `>' `(' `)')
752: they should be surrounded by spaces.
753: .PP
754: Also available in expressions as primitive operands are command executions
755: enclosed in `{' and `}'
756: and file enquiries of the form `\-\fIl\fR name' where
757: .I l
758: is one of:
759: .PP
760: .DT
761: .nf
762: r read access
763: w write access
764: x execute access
765: e existence
766: o ownership
767: z zero size
768: f plain file
769: d directory
770: .fi
771: .PP
772: The specified name is command and filename expanded and then tested
773: to see if it has the specified relationship to the real user.
774: If the file does not exist or is inaccessible then all enquiries return
775: false, i.e. `0'.
776: Command executions succeed, returning true, i.e. `1',
777: if the command exits with status 0, otherwise they fail, returning
778: false, i.e. `0'.
779: If more detailed status information is required then the command
780: should be executed outside of an expression and the variable
781: .I status
782: examined.
783: .sh "Control flow"
784: The shell contains a number of commands which can be used to regulate the
785: flow of control in command files (shell scripts) and
786: (in limited but useful ways) from terminal input.
787: These commands all operate by forcing the shell to reread or skip in its
788: input and, due to the implementation, restrict the placement of some
789: of the commands.
790: .PP
791: The
792: .I foreach,
793: .I switch,
794: and
795: .I while
796: statements, as well as the
797: .I if\-then\-else
798: form of the
799: .I if
800: statement require that the major keywords appear in a single simple command
801: on an input line as shown below.
802: .PP
803: If the shell's input is not seekable,
804: the shell buffers up input whenever a loop is being read
805: and performs seeks in this internal buffer to accomplish the rereading
806: implied by the loop.
807: (To the extent that this allows, backward goto's will succeed on
808: non-seekable inputs.)
809: .sh "Builtin commands"
810: Builtin commands are executed within the shell.
811: If a builtin command occurs as any component of a pipeline
812: except the last then it is executed in a subshell.
813: .HP 5
814: .B alias
815: .br
816: .ns
817: .HP 5
818: .BR alias " name"
819: .br
820: .ns
821: .HP 5
822: .BR alias " name wordlist"
823: .br
824: The first form prints all aliases.
825: The second form prints the alias for name.
826: The final form assigns the specified
827: .I wordlist
828: as the alias of
829: .I name;
830: .I wordlist
831: is command and filename substituted.
832: .I Name
833: is not allowed to be
834: .I alias
835: or
836: .I unalias.
837: .HP 5
838: .B alloc
839: .br
840: Shows the amount of dynamic core in use, broken down into used and
841: free core, and address of the last location in the heap.
842: With an argument shows each used and free block on the internal dynamic
843: memory chain indicating its address, size, and whether it is used or free.
844: This is a debugging command and may not work in production versions of the
845: shell; it requires a modified version of the system memory allocator.
846: .HP 5
847: .B bg
848: .br
849: .ns
850: .HP 5
851: \fBbg\ %\fRjob\ ...
852: .br
853: Puts the current or specified jobs into the background, continuing them
854: if they were stopped.
855: .HP 5
856: .B break
857: .br
858: Causes execution to resume after the
859: .I end
860: of the nearest enclosing
861: .I foreach
862: or
863: .I while.
864: The remaining commands on the current line are executed.
865: Multi-level breaks are thus possible by writing them all on one line.
866: .HP 5
867: .B breaksw
868: .br
869: Causes a break from a
870: .I switch,
871: resuming after the
872: .I endsw.
873: .HP 5
874: .BR case " label:"
875: .br
876: A label in a
877: .I switch
878: statement as discussed below.
879: .HP 5
880: .B cd
881: .br
882: .ns
883: .HP 5
884: .BR cd " name"
885: .br
886: .ns
887: .HP 5
888: .B chdir
889: .br
890: .ns
891: .HP 5
892: .BR chdir " name"
893: .br
894: Change the shells working directory to directory
895: .I name.
896: If no argument is given then change to the home directory of the user.
897: .br
898: If
899: .I name
900: is not found as a subdirectory of the current directory (and does not begin
901: with `/', `./' or `../'), then each
902: component of the variable
903: .I cdpath
904: is checked to see if it has a subdirectory
905: .I name.
906: Finally, if all else fails but
907: .I name
908: is a shell variable whose value begins with `/', then this
909: is tried to see if it is a directory.
910: .HP 5
911: .B continue
912: .br
913: Continue execution of the nearest enclosing
914: .I while
915: or
916: .I foreach.
917: The rest of the commands on the current line are executed.
918: .HP 5
919: .B default:
920: .br
921: Labels the default case in a
922: .I switch
923: statement.
924: The default should come after all
925: .I case
926: labels.
927: .HP 5
928: .BR "dirs"
929: .br
930: Prints the directory stack; the top of the stack is at the left,
931: the first directory in the stack being the current directory.
932: .HP 5
933: .BR echo " wordlist"
934: .br
935: .ns
936: .HP 5
937: .BR "echo \-n" " wordlist"
938: .br
939: The specified words are written to the shells standard output, separated
940: by spaces, and terminated with a newline unless the
941: .B \-n
942: option is specified.
943: .HP 5
944: .B else
945: .br
946: .ns
947: .HP 5
948: .B end
949: .br
950: .ns
951: .HP 5
952: .B endif
953: .br
954: .ns
955: .HP 5
956: .B endsw
957: .br
958: See the description of the
959: .I foreach,
960: .I if,
961: .I switch,
962: and
963: .I while
964: statements below.
965: .HP 5
966: .BR eval " arg ..."
967: .br
968: (As in
969: .IR sh (1).)
970: The arguments are read as input to the shell and the resulting
971: command(s) executed in the context of the current shell.
972: This is usually used to execute commands
973: generated as the result of command or variable substitution, since
974: parsing occurs before these substitutions. See
975: .IR tset (1)
976: for an example of using
977: .IR eval .
978: .HP 5
979: .BR exec " command"
980: .br
981: The specified command is executed in place of the current shell.
982: .HP 5
983: .B exit
984: .br
985: .ns
986: .HP 5
987: .BR exit (expr)
988: .br
989: The shell exits either with the value of the
990: .I status
991: variable (first form) or with the value of the specified
992: .I expr
993: (second form).
994: .HP 5
995: .B fg
996: .br
997: .ns
998: .HP 5
999: \fBfg\ %\fRjob\ ...
1000: .br
1001: Brings the current or specified jobs into the foreground, continuing them if
1002: they were stopped.
1003: .HP 5
1004: .BR foreach " name (wordlist)"
1005: .br
1006: .ns
1007: .HP 5
1008: \ ...
1009: .br
1010: .ns
1011: .HP 5
1012: .B end
1013: .br
1014: The variable
1015: .I name
1016: is successively set to each member of
1017: .I wordlist
1018: and the sequence of commands between this command and the matching
1019: .I end
1020: are executed.
1021: (Both
1022: .I foreach
1023: and
1024: .I end
1025: must appear alone on separate lines.)
1026: .IP
1027: The builtin command
1028: .I continue
1029: may be used to continue the loop prematurely and the builtin
1030: command
1031: .I break
1032: to terminate it prematurely.
1033: When this command is read from the terminal, the loop is read up once
1034: prompting with `?' before any statements in the loop are executed.
1035: If you make a mistake typing in a loop at the terminal you can rub it out.
1036: .HP 5
1037: .BR glob " wordlist"
1038: .br
1039: Like
1040: .I echo
1041: but no `\e' escapes are recognized and words are delimited
1042: by null characters in the output.
1043: Useful for programs which wish to use the shell to filename expand a list
1044: of words.
1045: .HP 5
1046: .BR goto " word"
1047: .br
1048: The specified
1049: .I word
1050: is filename and command expanded to yield a string of the form `label'.
1051: The shell rewinds its input as much as possible
1052: and searches for a line of the form `label:'
1053: possibly preceded by blanks or tabs.
1054: Execution continues after the specified line.
1055: .HP 5
1056: .BR hashstat
1057: .br
1058: Print a statistics line indicating how effective the internal hash
1059: table has been at locating commands (and avoiding
1060: .IR exec 's).
1061: An
1062: .I exec
1063: is attempted for each component of the
1064: .I path
1065: where the hash function indicates a possible hit, and in each component
1066: which does not begin with a `/'.
1067: .HP 5
1068: .B history
1069: .br
1070: .ns
1071: .HP 5
1072: .BI history " n"
1073: .br
1074: .ns
1075: .HP 5
1076: .BI "history \-r" " n"
1077: .br
1078: .ns
1079: .HP 5
1080: .BI "history \-h" " n"
1081: .br
1082: Displays the history event list; if \fIn\fR is given only the
1083: .I n
1084: most recent events are printed.
1085: The
1086: .B \-r
1087: option reverses the order of printout to be most recent first
1088: rather than oldest first.
1089: The
1090: .B \-h
1091: option causes the history list to be printed without leading numbers.
1092: This is used to produce files suitable for sourceing using the \-h
1093: option to
1094: .IR source .
1095: .HP 5
1096: .BR if " (expr) command"
1097: .br
1098: If the specified expression evaluates true, then the single
1099: .I command
1100: with arguments is executed.
1101: Variable substitution on
1102: .IR command ""
1103: happens early, at the same
1104: time it does for the rest of the
1105: .I if
1106: command.
1107: .I Command
1108: must be a simple command, not
1109: a pipeline, a command list, or a parenthesized command list.
1110: Input/output redirection occurs even if
1111: .I expr
1112: is false, when command is
1113: .B not
1114: executed (this is a bug).
1115: .HP 5
1116: .BR if " (expr) " "then"
1117: .br
1118: .ns
1119: .HP 5
1120: \ ...
1121: .br
1122: .ns
1123: .HP 5
1124: .BR else " " "if\fR (expr2) \fBthen"
1125: .br
1126: .ns
1127: .HP 5
1128: \ ...
1129: .br
1130: .ns
1131: .HP 5
1132: .B else
1133: .br
1134: .ns
1135: .HP 5
1136: \ ...
1137: .br
1138: .ns
1139: .HP 5
1140: .B endif
1141: .br
1142: If the specified
1143: .IR expr ""
1144: is true then the commands to the first
1145: .I else
1146: are executed; else if
1147: .IR expr2 ""
1148: is true then the commands to the
1149: second else are executed, etc.
1150: Any number of
1151: .I else-if
1152: pairs are possible; only one
1153: .I endif
1154: is needed.
1155: The
1156: .I else
1157: part is likewise optional.
1158: (The words
1159: .I else
1160: and
1161: .I endif
1162: must appear at the beginning of input lines;
1163: the
1164: .I if
1165: must appear alone on its input line or after an
1166: .I else.)
1167: .HP 5
1168: .B jobs
1169: .br
1170: .ns
1171: .HP 5
1172: .B "jobs \-l"
1173: .br
1174: Lists the active jobs; given the
1175: .B \-l
1176: options lists process id's in addition to the normal information.
1177: .HP 5
1178: \fBkill %\fRjob
1179: .br
1180: .ns
1181: .HP 5
1182: \fBkill\ \-\fRsig\ \fB%\fRjob\ ...
1183: .br
1184: .ns
1185: .HP 5
1186: \fBkill\fR\ pid
1187: .br
1188: .ns
1189: .HP 5
1190: \fBkill\ \-\fRsig\ pid\ ...
1191: .br
1192: .ns
1193: .HP 5
1194: \fBkill\ \-l\fR
1195: .br
1196: Sends either the TERM (terminate) signal or the
1197: specified signal to the specified jobs or processes.
1198: Signals are either given by number or by names (as given in
1199: .I /usr/include/signal.h,
1200: stripped of the prefix ``SIG'').
1201: The signal names are listed by ``kill \-l''.
1202: There is no default, saying just `kill' does not
1203: send a signal to the current job.
1204: If the signal being sent is TERM (terminate) or HUP (hangup),
1205: then the job or process will be sent a CONT (continue) signal as well.
1206: .HP
1207: \fBlimit\fR
1208: .br
1209: .ns
1210: .HP 5
1211: \fBlimit\fR \fIresource\fR
1212: .br
1213: .ns
1214: .HP 5
1215: \fBlimit\fR \fIresource\fR \fImaximum-use\fR
1216: .br
1217: Limits the consumption by the current process and each process
1218: it creates to not individually exceed \fImaximum-use\fR on the
1219: specified \fIresource\fR. If no \fImaximum-use\fR is given, then
1220: the current limit is printed; if no \fIresource\fR is given, then
1221: all limitations are given.
1222: .IP
1223: Resources controllable currently include \fIcputime\fR (the maximum
1224: number of cpu-seconds to be used by each process), \fIfilesize\fR
1225: (the largest single file which can be created), \fIdatasize\fR
1226: (the maximum growth of the data+stack region via
1227: .IR sbrk (2)
1228: beyond the end of the program text), \fIstacksize\fR (the maximum
1229: size of the automatically-extended stack region), and \fIcoredumpsize\fR
1230: (the size of the largest core dump that will be created).
1231: .IP
1232: The \fImaximum-use\fR may be given as a (floating point or integer)
1233: number followed by a scale factor. For all limits other than \fIcputime\fR
1234: the default scale is `k' or `kilobytes' (1024 bytes);
1235: a scale factor of `m' or `megabytes' may also be used.
1236: For
1237: .I cputime
1238: the default scaling is `seconds', while `m' for minutes
1239: or `h' for hours, or a time of the form `mm:ss' giving minutes
1240: and seconds may be used.
1241: .IP
1242: For both \fIresource\fR names and scale factors, unambiguous prefixes
1243: of the names suffice.
1244: .HP 5
1245: .B login
1246: .br
1247: Terminate a login shell, replacing it with an instance of
1248: .B /bin/login.
1249: This is one way to log off, included for compatibility with
1250: .IR sh (1).
1251: .HP 5
1252: .B logout
1253: .br
1254: Terminate a login shell.
1255: Especially useful if
1256: .I ignoreeof
1257: is set.
1258: .HP 5
1259: .B nice
1260: .br
1261: .ns
1262: .HP 5
1263: .BR nice " \+number"
1264: .br
1265: .ns
1266: .HP 5
1267: .BR nice " command"
1268: .br
1269: .ns
1270: .HP 5
1271: .BR nice " \+number command"
1272: .br
1273: The first form sets the
1274: .I nice
1275: for this shell to 4.
1276: The second form sets the
1277: .I nice
1278: to the given number.
1279: The final two forms run command at priority 4 and
1280: .I number
1281: respectively.
1282: The super-user may specify negative niceness by using `nice \-number ...'.
1283: Command is always executed in a sub-shell, and the restrictions
1284: place on commands in simple
1285: .I if
1286: statements apply.
1287: .HP 5
1288: .B nohup
1289: .br
1290: .ns
1291: .HP 5
1292: .BR "nohup" " command"
1293: .br
1294: The first form can be used in shell scripts to cause hangups to be
1295: ignored for the remainder of the script.
1296: The second form causes the specified command to be run with hangups
1297: ignored.
1298: All processes detached with `&' are effectively
1299: .I nohup'ed.
1300: .HP 5
1301: .B notify
1302: .br
1303: .ns
1304: .HP 5
1305: \fBnotify\ %\fRjob\ ...
1306: .br
1307: Causes the shell to notify the user asynchronously when the status of the
1308: current or specified jobs changes; normally notification is presented
1309: before a prompt. This is automatic if the shell variable
1310: .I notify
1311: is set.
1312: .HP 5
1313: .B onintr
1314: .br
1315: .ns
1316: .HP 5
1317: .BR onintr " \-"
1318: .br
1319: .ns
1320: .HP 5
1321: .BR onintr " label"
1322: .br
1323: Control the action of the shell on interrupts.
1324: The first form restores the default action of the shell on interrupts
1325: which is to terminate shell scripts or to return to the terminal command
1326: input level.
1327: The second form `onintr \-' causes all interrupts to be ignored.
1328: The final form causes the shell to execute a `goto label' when
1329: an interrupt is received or a child process terminates because
1330: it was interrupted.
1331: .IP
1332: In any case, if the shell is running detached and interrupts are
1333: being ignored, all forms of
1334: .I onintr
1335: have no meaning and interrupts
1336: continue to be ignored by the shell and all invoked commands.
1337: .HP 5
1338: .BR "popd"
1339: .br
1340: .ns
1341: .HP 5
1342: .BR "popd" " +n"
1343: .br
1344: Pops the directory stack, returning to the new top directory.
1345: With a argument `+\fIn\fR' discards the \fIn\fR\|th
1346: entry in the stack.
1347: The elements of the directory stack are numbered from 0 starting at the top.
1348: .HP 5
1349: .BR "pushd"
1350: .br
1351: .ns
1352: .HP 5
1353: .BR "pushd" " name"
1354: .br
1355: .ns
1356: .HP 5
1357: .BR "pushd" " +n"
1358: .br
1359: With no arguments,
1360: .I pushd
1361: exchanges the top two elements of the directory stack.
1362: Given a
1363: .I name
1364: argument,
1365: .I pushd
1366: changes to the new directory (ala
1367: .I cd)
1368: and pushes the old current working directory
1369: (as in
1370: .I csw)
1371: onto the directory stack.
1372: With a numeric argument, rotates the \fIn\fR\|th argument of the directory
1373: stack around to be the top element and changes to it. The members
1374: of the directory stack are numbered from the top starting at 0.
1375: .HP 5
1376: .BR rehash
1377: .br
1378: Causes the internal hash table of the contents of the directories in
1379: the
1380: .I path
1381: variable to be recomputed. This is needed if new commands are added
1382: to directories in the
1383: .I path
1384: while you are logged in. This should only be necessary if you add
1385: commands to one of your own directories, or if a systems programmer
1386: changes the contents of one of the system directories.
1387: .HP 5
1388: .BR repeat " count command"
1389: .br
1390: The specified
1391: .I command
1392: which is subject to the same restrictions
1393: as the
1394: .I command
1395: in the one line
1396: .I if
1397: statement above,
1398: is executed
1399: .I count
1400: times.
1401: I/O redirections occur exactly once, even if
1402: .I count
1403: is 0.
1404: .HP 5
1405: .B set
1406: .br
1407: .ns
1408: .HP 5
1409: .BR set " name"
1410: .br
1411: .ns
1412: .HP 5
1413: .BR set " name=word"
1414: .br
1415: .ns
1416: .HP 5
1417: .BR set " name[index]=word"
1418: .br
1419: .ns
1420: .HP 5
1421: .BR set " name=(wordlist)"
1422: .br
1423: The first form of the command shows the value of all shell variables.
1424: Variables which have other than a single word as value print as a parenthesized
1425: word list.
1426: The second form sets
1427: .I name
1428: to the null string.
1429: The third form sets
1430: .I name
1431: to the single
1432: .I word.
1433: The fourth form sets
1434: the
1435: .I index'th
1436: component of name to word;
1437: this component must already exist.
1438: The final form sets
1439: .I name
1440: to the list of words in
1441: .I wordlist.
1442: In all cases the value is command and filename expanded.
1443: .IP
1444: These arguments may be repeated to set multiple values in a single set command.
1445: Note however, that variable expansion happens for all arguments before any
1446: setting occurs.
1447: .HP 5
1448: .BR setenv " name value"
1449: .br
1450: Sets the value of environment variable
1451: .I name
1452: to be
1453: .I value,
1454: a single string.
1455: The most commonly used environment variable USER, TERM, and PATH
1456: are automatically imported to and exported from the
1457: .I csh
1458: variables
1459: .I user,
1460: .I term,
1461: and
1462: .I path;
1463: there is no need to use
1464: .I setenv
1465: for these.
1466: .HP 5
1467: .B shift
1468: .br
1469: .ns
1470: .HP 5
1471: .BR shift " variable"
1472: .br
1473: The members of
1474: .I argv
1475: are shifted to the left, discarding
1476: .I argv[1].
1477: It is an error for
1478: .I argv
1479: not to be set or to have less than one word as value.
1480: The second form performs the same function on the specified variable.
1481: .HP 5
1482: .BR source " name"
1483: .br
1484: .ns
1485: .HP 5
1486: .BR "source \-h" " name"
1487: .br
1488: The shell reads commands from
1489: .I name.
1490: .I Source
1491: commands may be nested; if they are nested too deeply the shell may
1492: run out of file descriptors.
1493: An error in a
1494: .I source
1495: at any level terminates all nested
1496: .I source
1497: commands.
1498: Normally input during
1499: .I source
1500: commands is not placed on the history list;
1501: the \-h option causes the commands to be placed in the
1502: history list without being executed.
1503: .HP 5
1504: .B stop
1505: .br
1506: .ns
1507: .HP 5
1508: \fBstop\ %\fRjob\ ...
1509: .br
1510: Stops the current or specified job which is executing in the background.
1511: .HP 5
1512: .B suspend
1513: .br
1514: .ns
1515: Causes the shell to stop in its tracks, much as if it had been sent a stop
1516: signal with \fB^Z\fR. This is most often used to stop shells started by
1517: .IR su (1).
1518: .HP 5
1519: .BR switch " (string)"
1520: .br
1521: .ns
1522: .HP 5
1523: .BR case " str1:"
1524: .br
1525: .ns
1526: .HP 5
1527: \ ...
1528: .br
1529: .ns
1530: .HP 5
1531: \
1532: .B breaksw
1533: .br
1534: .ns
1535: .HP 5
1536: \&...
1537: .br
1538: .ns
1539: .HP 5
1540: .B default:
1541: .br
1542: .ns
1543: .HP 5
1544: \ ...
1545: .br
1546: .ns
1547: .HP 5
1548: \
1549: .B breaksw
1550: .br
1551: .ns
1552: .HP 5
1553: .B endsw
1554: .br
1555: Each case label is successively matched, against the specified
1556: .I string
1557: which is first command and filename expanded.
1558: The file metacharacters `*', `?' and `[...]' may be used in the case labels,
1559: which are variable expanded.
1560: If none of the labels match before a `default' label is found, then
1561: the execution begins after the default label.
1562: Each case label and the default label must appear at the beginning of a line.
1563: The command
1564: .I breaksw
1565: causes execution to continue after the
1566: .I endsw.
1567: Otherwise control may fall through case labels and default labels as in C.
1568: If no label matches and there is no default, execution continues after
1569: the
1570: .I endsw.
1571: .HP 5
1572: .B time
1573: .br
1574: .ns
1575: .HP 5
1576: .BR time " command"
1577: .br
1578: With no argument, a summary of time used by this shell and its children
1579: is printed.
1580: If arguments are given
1581: the specified simple command is timed and a time summary
1582: as described under the
1583: .I time
1584: variable is printed. If necessary, an extra shell is created to print the time
1585: statistic when the command completes.
1586: .HP 5
1587: .B umask
1588: .br
1589: .ns
1590: .HP 5
1591: .BR umask " value"
1592: .br
1593: The file creation mask is displayed (first form) or set to the specified
1594: value (second form). The mask is given in octal. Common values for
1595: the mask are 002 giving all access to the group and read and execute
1596: access to others or 022 giving all access except no write access for
1597: users in the group or others.
1598: .HP 5
1599: .BR unalias " pattern"
1600: .br
1601: All aliases whose names match the specified pattern are discarded.
1602: Thus all aliases are removed by `unalias *'.
1603: It is not an error for nothing to be
1604: .I unaliased.
1605: .HP 5
1606: .BR unhash
1607: .br
1608: Use of the internal hash table to speed location of executed programs
1609: is disabled.
1610: .HP 5
1611: \fBunlimit\fR \fIresource\fR
1612: .br
1613: .ns
1614: .HP 5
1615: \fBunlimit\fR
1616: .br
1617: Removes the limitation on \fIresource\fR. If no \fIresource\fR
1618: is specified, then all \fIresource\fR limitations are removed.
1619: .HP 5
1620: .BR unset " pattern"
1621: .br
1622: All variables whose names match the specified pattern are removed.
1623: Thus all variables are removed by `unset *'; this has noticeably
1624: distasteful side-effects.
1625: It is not an error for nothing to be
1626: .I unset.
1627: .HP 5
1628: .BR unsetenv " pattern"
1629: .br
1630: Removes all variables whose name match the specified pattern from the
1631: environment. See also the
1632: .I setenv
1633: command above and
1634: .IR printenv (1).
1635: .HP 5
1636: .B wait
1637: .br
1638: All background jobs are waited for.
1639: It the shell is interactive, then an interrupt can disrupt the wait,
1640: at which time the shell prints names and job numbers of all jobs
1641: known to be outstanding.
1642: .HP 5
1643: .BR while " (expr)"
1644: .br
1645: .ns
1646: .HP 5
1647: \ ...
1648: .br
1649: .ns
1650: .HP 5
1651: .B end
1652: .br
1653: While the specified expression evaluates non-zero, the commands between
1654: the
1655: .I while
1656: and the matching end are evaluated.
1657: .I Break
1658: and
1659: .I continue
1660: may be used to terminate or continue the loop prematurely.
1661: (The
1662: .I while
1663: and
1664: .I end
1665: must appear alone on their input lines.)
1666: Prompting occurs here the first time through the loop as for the
1667: .I foreach
1668: statement if the input is a terminal.
1669: .HP 5
1670: \fB%\fRjob
1671: .br
1672: Brings the specified job into the foreground.
1673: .HP 5
1674: \fB%\fRjob \fB&\fR
1675: .br
1676: Continues the specified job in the background.
1677: .HP 5
1678: .B "@"
1679: .br
1680: .ns
1681: .HP 5
1682: .BR "@" " name = expr"
1683: .br
1684: .ns
1685: .HP 5
1686: .BR "@" " name[index] = expr"
1687: .br
1688: The first form prints the values of all the shell variables.
1689: The second form sets the specified
1690: .I name
1691: to the value of
1692: .I expr.
1693: If the expression contains `<', `>', `&' or `|' then at least
1694: this part of the expression must be placed within `(' `)'.
1695: The third form assigns the value of
1696: .I expr
1697: to the
1698: .I index'th
1699: argument of
1700: .I name.
1701: Both
1702: .I name
1703: and its
1704: .I index'th
1705: component must already exist.
1706: .IP
1707: The operators `*=', `+=', etc are available as in C.
1708: The space separating the name from the assignment operator is optional.
1709: Spaces are, however, mandatory in separating components of
1710: .I expr
1711: which would otherwise be single words.
1712: .IP
1713: Special postfix `++' and `\-\|\-' operators increment and decrement
1714: .I name
1715: respectively, i.e. `@ i++'.
1716: .sh "Pre-defined and environment variables"
1717: The following variables have special meaning to the shell.
1718: Of these,
1719: .I argv,
1720: .I cwd,
1721: .I home,
1722: .I path,
1723: .I prompt,
1724: .I shell
1725: and
1726: .I status
1727: are always set by the shell.
1728: Except for
1729: .I cwd
1730: and
1731: .I status
1732: this setting occurs only at initialization;
1733: these variables will not then be modified unless this is done
1734: explicitly by the user.
1735: .PP
1736: This shell copies the environment variable USER into the variable
1737: .I user,
1738: TERM into
1739: .I term,
1740: and
1741: HOME into
1742: .I home,
1743: and copies these back into the environment whenever the normal
1744: shell variables are reset.
1745: The environment variable PATH is likewise handled; it is not
1746: necessary to worry about its setting other than in the file
1747: .I \&.cshrc
1748: as inferior
1749: .I csh
1750: processes will import the definition of
1751: .I path
1752: from the environment, and re-export it if you then change it.
1753: .TP 15
1754: .B argv
1755: \c
1756: Set to the arguments to the shell, it is from this variable that
1757: positional parameters are substituted, i.e. `$1' is replaced by
1758: `$argv[1]', etc.
1759: .TP 15
1760: .B cdpath
1761: \c
1762: Gives a list of alternate directories searched to find subdirectories
1763: in
1764: .I chdir
1765: commands.
1766: .TP 15
1767: .B cwd
1768: The full pathname of the current directory.
1769: .TP 15
1770: .B echo
1771: \c
1772: Set when the
1773: .B \-x
1774: command line option is given.
1775: Causes each command and its arguments
1776: to be echoed just before it is executed.
1777: For non-builtin commands all expansions occur before echoing.
1778: Builtin commands are echoed before command and filename substitution,
1779: since these substitutions are then done selectively.
1780: .TP 15
1781: .B histchars
1782: \c
1783: Can be given a string value to change the characters used in history
1784: substitution. The first character of its value is used as the
1785: history substitution character, replacing the default character !.
1786: The second character of its value replaces the character \(ua in
1787: quick substitutions.
1788: .TP 15
1789: .B history
1790: \c
1791: Can be given a numeric value to control the size of the history list.
1792: Any command which has been referenced in this many events will not be
1793: discarded.
1794: Too large values of
1795: .I history
1796: may run the shell out of memory.
1797: The last executed command is always saved on the history list.
1798: .TP 15
1799: .B home
1800: \c
1801: The home directory of the invoker, initialized from the environment.
1802: The filename expansion of `\fB~\fR' refers to this variable.
1803: .TP 15
1804: .B ignoreeof
1805: \c
1806: If set the shell ignores
1807: end-of-file from input devices which are terminals.
1808: This prevents shells from accidentally being killed by control-D's.
1809: .TP 15
1810: .B mail
1811: \c
1812: The files where the shell checks for mail.
1813: This is done after each command completion which will result in a prompt,
1814: if a specified interval has elapsed.
1815: The shell says `You have new mail.'
1816: if the file exists with an access time not greater than its modify time.
1817: .IP
1818: If the first word of the value of
1819: .I mail
1820: is numeric it specifies a different mail checking interval, in seconds,
1821: than the default, which is 10 minutes.
1822: .IP
1823: If multiple mail files are specified, then the shell says
1824: `New mail in
1825: .IR name '
1826: when there is mail in the file
1827: .I name.
1828: .TP 15
1829: .B noclobber
1830: \c
1831: As described in the section on
1832: .I Input/output,
1833: restrictions are placed on output redirection to insure that
1834: files are not accidentally destroyed, and that `>>' redirections
1835: refer to existing files.
1836: .TP 15
1837: .B noglob
1838: \c
1839: If set, filename expansion is inhibited.
1840: This is most useful in shell scripts which are not dealing with filenames,
1841: or after a list of filenames has been obtained and further expansions
1842: are not desirable.
1843: .TP 15
1844: .B nonomatch
1845: \c
1846: If set, it is not an error for a filename expansion to not match any
1847: existing files; rather the primitive pattern is returned.
1848: It is still an error for the primitive pattern to be malformed, i.e.
1849: `echo [' still gives an error.
1850: .TP 15
1851: .B notify
1852: \c
1853: If set, the shell notifies asynchronously of job completions. The
1854: default is to rather present job completions just before printing
1855: a prompt.
1856: .TP 15
1857: .B path
1858: \c
1859: Each word of the path variable specifies a directory in which
1860: commands are to be sought for execution.
1861: A null word specifies the current directory.
1862: If there is no
1863: .I path
1864: variable then only full path names will execute.
1865: The usual search path is `.', `/bin' and `/usr/bin', but this
1866: may vary from system to system.
1867: For the super-user the default search path is `/etc', `/bin' and `/usr/bin'.
1868: A shell which is given neither the
1869: .B \-c
1870: nor the
1871: .B \-t
1872: option will normally hash the contents of the directories in the
1873: .I path
1874: variable after reading
1875: .I \&.cshrc,
1876: and each time the
1877: .I path
1878: variable is reset. If new commands are added to these directories
1879: while the shell is active, it may be necessary to give the
1880: .I rehash
1881: or the commands may not be found.
1882: .TP 15
1883: .B prompt
1884: \c
1885: The string which is printed before each command is read from
1886: an interactive terminal input.
1887: If a `!' appears in the string it will be replaced by the current event number
1888: unless a preceding `\e' is given.
1889: Default is `% ', or `# ' for the super-user.
1890: .TP 15
1891: .B savehist
1892: \c
1893: is given a numeric value to control the number of entries of the
1894: history list that are saved in ~/.history when the user logs out.
1895: Any command which has been referenced in this many events will be saved.
1896: During start up the shell sources ~/.history into the history list
1897: enabling history to be saved across logins.
1898: Too large values of
1899: .I savehist
1900: will slow down the shell during start up.
1901: .TP 15
1902: .B shell
1903: \c
1904: The file in which the shell resides.
1905: This is used in forking shells to interpret files which have execute
1906: bits set, but which are not executable by the system.
1907: (See the description of
1908: .I "Non-builtin Command Execution"
1909: below.)
1910: Initialized to the (system-dependent) home of the shell.
1911: .TP 15
1912: .B status
1913: \c
1914: The status returned by the last command.
1915: If it terminated abnormally, then 0200 is added to the status.
1916: Builtin commands which fail return exit status `1',
1917: all other builtin commands set status `0'.
1918: .TP 15
1919: .B time
1920: \c
1921: Controls automatic timing of commands.
1922: If set, then any command which takes more than this many cpu seconds
1923: will cause a line giving user, system, and real times and a utilization
1924: percentage which is the ratio of user plus system times to real time
1925: to be printed when it terminates.
1926: .TP 15
1927: .B verbose
1928: \c
1929: Set by the
1930: .B \-v
1931: command line option, causes the words of each command to be printed
1932: after history substitution.
1933: .sh "Non-builtin command execution"
1934: When a command to be executed is found to not be a builtin command
1935: the shell attempts to execute the command via
1936: .IR execve (2).
1937: Each word in the variable
1938: .I path
1939: names a directory from which the shell will attempt to execute the command.
1940: If it is given neither a
1941: .B \-c
1942: nor a
1943: .B \-t
1944: option, the shell will hash the names in these directories into an internal
1945: table so that it will only try an
1946: .I exec
1947: in a directory if there is a possibility that the command resides there.
1948: This greatly speeds command location when a large number of directories
1949: are present in the search path.
1950: If this mechanism has been turned off (via
1951: .IR unhash ),
1952: or if the shell was given a
1953: .B \-c
1954: or
1955: .B \-t
1956: argument, and in any case for each directory component of
1957: .I path
1958: which does not begin with a `/',
1959: the shell concatenates with the given command name to form a path name
1960: of a file which it then attempts to execute.
1961: .PP
1962: Parenthesized commands are always executed in a subshell.
1963: Thus `(cd ; pwd) ; pwd' prints the
1964: .I home
1965: directory; leaving you where you were (printing this after the home directory),
1966: while `cd ; pwd' leaves you in the
1967: .I home
1968: directory.
1969: Parenthesized commands are most often used to prevent
1970: .I chdir
1971: from affecting the current shell.
1972: .PP
1973: If the file has execute permissions but is not an
1974: executable binary to the system, then it is assumed to be a
1975: file containing shell commands and a new shell is spawned to read it.
1976: .PP
1977: If there is an
1978: .I alias
1979: for
1980: .I shell
1981: then the words of the alias will be prepended to the argument list to form
1982: the shell command.
1983: The first word of the
1984: .I alias
1985: should be the full path name of the shell
1986: (e.g. `$shell').
1987: Note that this is a special, late occurring, case of
1988: .I alias
1989: substitution,
1990: and only allows words to be prepended to the argument list without modification.
1991: .sh "Argument list processing"
1992: If argument 0 to the shell is `\-' then this
1993: is a login shell.
1994: The flag arguments are interpreted as follows:
1995: .TP 5
1996: .B \-c
1997: \c
1998: Commands are read from the (single) following argument which must
1999: be present.
2000: Any remaining arguments are placed in
2001: .I argv.
2002: .TP 5
2003: .B \-e
2004: \c
2005: The shell exits if any invoked command terminates abnormally
2006: or yields a non-zero exit status.
2007: .TP 5
2008: .B \-f
2009: \c
2010: The shell will start faster, because it will neither search for nor
2011: execute commands from the file
2012: `\&.cshrc' in the invokers home directory.
2013: .TP 5
2014: .B \-i
2015: \c
2016: The shell is interactive and prompts for its top-level input,
2017: even if it appears to not be a terminal.
2018: Shells are interactive without this option if their inputs
2019: and outputs are terminals.
2020: .TP 5
2021: .B \-n
2022: \c
2023: Commands are parsed, but not executed.
2024: This aids in syntactic checking of shell scripts.
2025: .TP 5
2026: .B \-s
2027: \c
2028: Command input is taken from the standard input.
2029: .TP 5
2030: .B \-t
2031: \c
2032: A single line of input is read and executed.
2033: A `\e' may be used to escape the newline at the end of this
2034: line and continue onto another line.
2035: .TP 5
2036: .B \-v
2037: \c
2038: Causes the
2039: .I verbose
2040: variable to be set, with the effect
2041: that command input is echoed after history substitution.
2042: .TP 5
2043: .B \-x
2044: \c
2045: Causes the
2046: .I echo
2047: variable to be set, so that commands are echoed immediately before execution.
2048: .TP 5
2049: .B \-V
2050: \c
2051: Causes the
2052: .I verbose
2053: variable to be set even before `\&.cshrc' is executed.
2054: .TP 5
2055: .B \-X
2056: \c
2057: Is to
2058: .B \-x
2059: as
2060: .B \-V
2061: is to
2062: .B \-v.
2063: .PP
2064: After processing of flag arguments if arguments remain but none of the
2065: .B \-c,
2066: .B \-i,
2067: .B \-s,
2068: or
2069: .B \-t
2070: options was given the first argument is taken as the name of a file of
2071: commands to be executed.
2072: The shell opens this file, and saves its name for possible resubstitution
2073: by `$0'.
2074: Since many systems use either the standard version 6 or version 7 shells
2075: whose shell scripts are not compatible with this shell, the shell will
2076: execute such a `standard' shell if the first character of a script
2077: is not a `#', i.e. if the script does not start with a comment.
2078: Remaining arguments initialize the variable
2079: .I argv.
2080: .sh "Signal handling"
2081: The shell normally ignores
2082: .I quit
2083: signals.
2084: Jobs running detached (either by `&' or the \fIbg\fR or \fB%... &\fR
2085: commands) are immune to signals generated from the keyboard, including
2086: hangups.
2087: Other signals have the values which the shell inherited from its parent.
2088: The shells handling of interrupts and terminate signals
2089: in shell scripts can be controlled by
2090: .I onintr.
2091: Login shells catch the
2092: .I terminate
2093: signal; otherwise this signal is passed on to children from the state in the
2094: shell's parent.
2095: In no case are interrupts allowed when a login shell is reading the file
2096: `\&.logout'.
2097: .SH AUTHOR
2098: William Joy.
2099: Job control and directory stack features first implemented by J.E. Kulp of
2100: I.I.A.S.A, Laxenburg, Austria,
2101: with different syntax than that used now.
2102: .SH FILES
2103: .ta 1.75i
2104: .nf
2105: ~/.cshrc Read at beginning of execution by each shell.
2106: ~/.login Read by login shell, after `.cshrc' at login.
2107: ~/.logout Read by login shell, at logout.
2108: /bin/sh Standard shell, for shell scripts not starting with a `#'.
2109: /tmp/sh* Temporary file for `<<'.
2110: /etc/passwd Source of home directories for `~name'.
2111: .fi
2112: .SH LIMITATIONS
2113: Words can be no longer than 1024 characters.
2114: The system limits argument lists to 10240 characters.
2115: The number of arguments to a command which involves filename expansion
2116: is limited to 1/6'th the number of characters allowed in an argument list.
2117: Command substitutions may substitute no more characters than are
2118: allowed in an argument list.
2119: To detect looping, the shell restricts the number of
2120: .I alias
2121: substitutions on a single line to 20.
2122: .SH "SEE ALSO"
2123: sh(1), access(2), execve(2), fork(2), killpg(2), pipe(2), sigvec(2),
2124: umask(2), setrlimit(2), wait(2), tty(4), a.out(5), environ(7),
2125: `An introduction to the C shell'
2126: .SH BUGS
2127: When a command is restarted from a stop,
2128: the shell prints the directory it started in if this is different
2129: from the current directory; this can be misleading (i.e. wrong)
2130: as the job may have changed directories internally.
2131: .PP
2132: Shell builtin functions are not stoppable/restartable.
2133: Command sequences of the form `a ; b ; c' are also not handled gracefully
2134: when stopping is attempted. If you suspend `b', the shell will then
2135: immediately execute `c'. This is especially noticeable if this
2136: expansion results from an
2137: .I alias.
2138: It suffices to place the sequence of commands in ()'s to force it to
2139: a subshell, i.e. `( a ; b ; c )'.
2140: .PP
2141: Control over tty output after processes are started is primitive;
2142: perhaps this will inspire someone to work on a good virtual
2143: terminal interface. In a virtual terminal interface much more
2144: interesting things could be done with output control.
2145: .PP
2146: Alias substitution is most often used to clumsily simulate shell procedures;
2147: shell procedures should be provided rather than aliases.
2148: .PP
2149: Commands within loops, prompted for by `?', are not placed in the
2150: .I history
2151: list.
2152: Control structure should be parsed rather than being recognized as built-in
2153: commands. This would allow control commands to be placed anywhere,
2154: to be combined with `|', and to be used with `&' and `;' metasyntax.
2155: .PP
2156: It should be possible to use the `:' modifiers on the output of command
2157: substitutions.
2158: All and more than one `:' modifier should be allowed on `$' substitutions.
2159: .PP
2160: Symbolic links fool the shell. In particular,
2161: .I dirs
2162: and `cd ..' don't work properly once you've crossed through a symbolic
2163: link.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.