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