|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)csh.1 6.1 (Berkeley) 5/23/86
6: .\"
7: .EH 'USD:4-%''An Introduction to the C shell'
8: .OH 'An Introduction to the C shell''USD:4-%'
9: .\".RP
10: .TL
11: An Introduction to the C shell
12: .AU
13: William Joy
14: (revised for 4.3BSD by Mark Seiden)
15: .AI
16: Computer Science Division
17: .br
18: Department of Electrical Engineering and Computer Science
19: .br
20: University of California, Berkeley
21: .br
22: Berkeley, California 94720
23: .AB
24: .I Csh
25: is a new command language interpreter for
26: .UX
27: systems.
28: It incorporates good features of other shells and a
29: .I history
30: mechanism similar to the
31: .I redo
32: of \s-2INTERLISP\s0.
33: While incorporating many features of other shells which make
34: writing shell programs (shell scripts) easier,
35: most of the features unique to
36: .I csh
37: are designed more for the interactive \s-2UNIX\s0 user.
38: .PP
39: \s-2UNIX\s0
40: users who have read a general introduction to the system
41: will find a valuable basic explanation of the shell here.
42: Simple terminal interaction with
43: .I csh
44: is possible after reading just the first section of this document.
45: The second section describes the shell's capabilities which you can
46: explore after you have begun to become acquainted with the shell.
47: Later sections introduce features which are useful, but not necessary
48: for all users of the shell.
49: .PP
50: Additional information includes an appendix listing special characters of the shell
51: and a glossary of terms and commands introduced in this manual.
52: .AE
53: .SH
54: .if n .ND
55: Introduction
56: .PP
57: A
58: .I shell
59: is a command language interpreter.
60: .I Csh
61: is the name of one particular command interpreter on
62: \s-2UNIX\s0.
63: The primary purpose of
64: .I csh
65: is to translate command lines typed at a terminal into
66: system actions, such as invocation of other programs.
67: .I Csh
68: is a user program just like any you might write.
69: Hopefully,
70: .I csh
71: will be a very useful program for you
72: in interacting with the \s-2UNIX\s0 system.
73: .PP
74: In addition to this document, you will want to refer to a copy
75: of the \s-2UNIX\s0 User Reference Manual.
76: The
77: .I csh
78: documentation in section 1 of the manual provides a full description of all
79: features of the shell and is the definitive reference for questions
80: about the shell.
81: .PP
82: Many words in this document are shown in
83: .I italics.
84: These are important words;
85: names of commands, and words which have special meaning in discussing
86: the shell and \s-2UNIX\s0.
87: Many of the words are defined in a glossary at the end of this document.
88: If you don't know what is meant by a word, you should look
89: for it in the glossary.
90: .SH
91: Acknowledgements
92: .PP
93: Numerous people have provided good input about previous versions
94: of
95: .I csh
96: and aided in its debugging and in the debugging of its documentation.
97: I would especially like to thank Michael Ubell
98: who made the crucial observation that history commands could be
99: done well over the word structure of input text, and implemented
100: a prototype history mechanism in an older version of the shell.
101: Eric Allman has also provided a large number of useful comments on the
102: shell, helping to unify those concepts which are present and to identify
103: and eliminate useless and marginally useful features.
104: Mike O'Brien suggested the pathname hashing
105: mechanism which speeds command execution.
106: Jim Kulp added the job control and directory stack primitives and
107: added their documentation to this introduction.
108: .br
109: .bp
110: .NH
111: Terminal usage of the shell
112: .NH 2
113: The basic notion of commands
114: .PP
115: A
116: .I shell
117: in
118: \s-2UNIX\s0
119: acts mostly as a medium through which other
120: .I programs
121: are invoked.
122: While it has a set of
123: .I builtin
124: functions which it performs directly,
125: most commands cause execution of programs that are, in fact,
126: external to the shell.
127: The shell is thus distinguished from the command interpreters of other
128: systems both by the fact that it is just a user program, and by the fact
129: that it is used almost exclusively as a mechanism for invoking other programs.
130: .PP
131: .I Commands
132: in the \s-2UNIX\s0 system consist of a list of strings or
133: .I words
134: interpreted as a
135: .I "command name"
136: followed by
137: .I arguments.
138: Thus the command
139: .DS
140: mail bill
141: .DE
142: consists of two words.
143: The first word
144: .I mail
145: names the command to be executed, in this case the
146: mail program which sends messages to other users.
147: The shell uses the name of the command in attempting to execute it for you.
148: It will look in a number of
149: .I directories
150: for a file with the name
151: .I mail
152: which is expected to contain the mail program.
153: .PP
154: The rest of the words of the command are given as
155: .I arguments
156: to the command itself when it is executed.
157: In this case we specified also the argument
158: .I bill
159: which is interpreted by the
160: .I mail
161: program to be the name of a user to whom mail is to be sent.
162: In normal terminal usage we might use the
163: .I mail
164: command as follows.
165: .DS
166: % mail bill
167: I have a question about the csh documentation.
168: My document seems to be missing page 5.
169: Does a page five exist?
170: Bill
171: EOT
172: %
173: .DE
174: .PP
175: Here we typed a message to send to
176: .I bill
177: and ended this message with a ^D which sent an end-of-file to
178: the mail program.
179: (Here and throughout this document, the notation ``^\fIx\fR''
180: is to be read ``control-\fIx\fR'' and represents the striking of the \fIx\fR
181: key while the control key is held down.)
182: The mail program
183: then echoed the characters `EOT' and transmitted our message.
184: The characters `% ' were printed before and after the mail command
185: by the shell to indicate that input was needed.
186: .PP
187: After typing the `% ' prompt the shell was reading command input from
188: our terminal.
189: We typed a complete command `mail bill'.
190: The shell then executed the
191: .I mail
192: program with argument
193: .I bill
194: and went dormant waiting for it to complete.
195: The mail program then read input from our terminal until we signalled
196: an end-of-file via typing a ^D after which the shell noticed
197: that mail had completed
198: and signaled us that it was ready to read from the terminal again by
199: printing another `% ' prompt.
200: .PP
201: This is the essential pattern of all interaction with \s-2UNIX\s0
202: through the shell.
203: A complete command is typed at the terminal, the shell executes
204: the command and when this execution completes, it prompts for a new command.
205: If you run the editor for an hour, the shell will patiently wait for
206: you to finish editing and obediently prompt you again whenever you finish
207: editing.
208: .PP
209: An example of a useful command you can execute now is the
210: .I tset
211: command, which sets the default
212: .I erase
213: and
214: .I kill
215: characters on your terminal \- the erase character erases the last
216: character you typed and the kill character erases the entire line you
217: have entered so far.
218: By default, the erase character is the delete key (equivalent to `^?')
219: and the kill character is `^U'. Some people prefer to make the erase character
220: the backspace key (equivalent to `^H').
221: You can make this be true by typing
222: .DS
223: tset \-e
224: .DE
225: which tells the program
226: .I tset
227: to set the erase character to tset's default setting for this character
228: (a backspace).
229: .NH 2
230: Flag arguments
231: .PP
232: A useful notion in \s-2UNIX\s0 is that of a
233: .I flag
234: argument.
235: While many arguments to commands specify file names or user names,
236: some arguments rather specify an optional capability of the command
237: which you wish to invoke.
238: By convention, such arguments begin with the character `\-' (hyphen).
239: Thus the command
240: .DS
241: ls
242: .DE
243: will produce a list of the files in the current
244: .I "working directory" .
245: The option
246: .I \-s
247: is the size option, and
248: .DS
249: ls \-s
250: .DE
251: causes
252: .I ls
253: to also give, for each file the size of the file in blocks of 512
254: characters.
255: The manual section for each command in the \s-2UNIX\s0 reference manual
256: gives the available options for each command.
257: The
258: .I ls
259: command has a large number of useful and interesting options.
260: Most other commands have either no options or only one or two options.
261: It is hard to remember options of commands which are not used very
262: frequently, so most \s-2UNIX\s0 utilities perform only one or two functions
263: rather than having a large number of hard to remember options.
264: .NH 2
265: Output to files
266: .PP
267: Commands that normally read input or write output on the terminal
268: can also be executed with this input and/or output done to
269: a file.
270: .PP
271: Thus suppose we wish to save the current date in a file called `now'.
272: The command
273: .DS
274: date
275: .DE
276: will print the current date on our terminal.
277: This is because our terminal is the default
278: .I "standard output"
279: for the date command and the date command prints the date on its
280: standard output.
281: The shell lets us
282: .I redirect
283: the
284: .I "standard output"
285: of a command through a
286: notation using the
287: .I metacharacter
288: `>' and the name of the file where output is to be placed.
289: Thus the command
290: .DS
291: date > now
292: .DE
293: runs the
294: .I date
295: command such that its standard output is
296: the file `now' rather than the terminal.
297: Thus this command places the current date and time into the file `now'.
298: It is important to know that the
299: .I date
300: command was unaware that its output was going to a file rather than
301: to the terminal.
302: The shell performed this
303: .I redirection
304: before the command began executing.
305: .PP
306: One other thing to note here is that the file `now'
307: need not have existed before the
308: .I date
309: command was executed; the shell would have created the file if it did
310: not exist.
311: And if the file did exist?
312: If it had existed previously these previous contents would have been discarded!
313: A shell option
314: .I noclobber
315: exists to prevent this from happening accidentally;
316: it is discussed in section 2.2.
317: .PP
318: The system normally keeps files which you create with `>' and all other files.
319: Thus the default is for files to be permanent. If you wish to create a file
320: which will be removed automatically, you can begin its name with a `#'
321: character, this `scratch' character denotes the fact that the file will
322: be a scratch file.*
323: .FS
324: *Note that if your erase character is a `#', you will have to precede the
325: `#' with a `\e'. The fact that the `#' character is the old (pre-\s-2CRT\s0)
326: standard erase character means that it seldom appears in a file name, and
327: allows this convention to be used for scratch files. If you are using a
328: \s-2CRT\s0, your erase character should be a ^H, as we demonstrated
329: in section 1.1 how this could be set up.
330: .FE
331: The system will remove such files after a couple of days,
332: or sooner if file space becomes very tight.
333: Thus, in running the
334: .I date
335: command above, we don't really want to save the output forever, so we
336: would more likely do
337: .DS
338: date > #now
339: .DE
340: .NH 2
341: Metacharacters in the shell
342: .PP
343: The shell has a large number of
344: special characters (like `>')
345: which indicate special functions.
346: We say that these notations have
347: .I syntactic
348: and
349: .I semantic
350: meaning to the shell.
351: In general, most characters which are neither letters nor digits
352: have special meaning to the shell.
353: We shall shortly learn a means of
354: .I quotation
355: which allows us to use
356: .I metacharacters
357: without the shell treating them in any special way.
358: .PP
359: Metacharacters normally have effect only when the shell is reading
360: our input.
361: We need not worry about placing shell metacharacters in a letter
362: we are sending via
363: .I mail,
364: or when we are typing in text or data to some other program.
365: Note that the shell is only reading input when it has prompted with
366: `% ' (although we can type our input even before it prompts).
367: .NH 2
368: Input from files; pipelines
369: .PP
370: We learned above how to
371: .I redirect
372: the
373: .I "standard output"
374: of a command
375: to a file.
376: It is also possible to redirect the
377: .I "standard input"
378: of a command from a file.
379: This is not often necessary since most commands will read from
380: a file whose name is given as an argument.
381: We can give the command
382: .DS
383: sort < data
384: .DE
385: to run the
386: .I sort
387: command with standard input, where the command normally
388: reads its input, from the file
389: `data'.
390: We would more likely say
391: .DS
392: sort data
393: .DE
394: letting the
395: .I sort
396: command open the file
397: `data'
398: for input itself since this is less to type.
399: .PP
400: We should note that if we just typed
401: .DS
402: sort
403: .DE
404: then the sort program would sort lines from its
405: .I "standard input."
406: Since we did not
407: .I redirect
408: the standard input, it would sort lines as we typed them on the terminal
409: until we typed a ^D to indicate an end-of-file.
410: .PP
411: A most useful capability is the ability to combine the standard output
412: of one command with the standard input of another, i.e. to run the
413: commands in a sequence known as a
414: .I pipeline.
415: For instance the command
416: .DS
417: ls \-s
418: .DE
419: normally produces a list of the files in our directory with the size
420: of each in blocks of 512 characters.
421: If we are interested in learning which of our files is largest we
422: may wish to have this sorted by size rather than by name, which is
423: the default way in which
424: .I ls
425: sorts.
426: We could look at the many options of
427: .I ls
428: to see if there was an option to do this but would eventually discover
429: that there is not.
430: Instead we can use a couple of simple options of the
431: .I sort
432: command, combining it with
433: .I ls
434: to get what we want.
435: .PP
436: The
437: .I \-n
438: option of sort specifies a numeric sort rather than an alphabetic sort.
439: Thus
440: .DS
441: ls \-s | sort \-n
442: .DE
443: specifies that the output of the
444: .I ls
445: command run with the option
446: .I \-s
447: is to be
448: .I piped
449: to the command
450: .I sort
451: run with the numeric sort option.
452: This would give us a sorted list of our files by size, but with the
453: smallest first.
454: We could then use the
455: .I \-r
456: reverse sort option and the
457: .I head
458: command in combination with the previous command doing
459: .DS
460: ls \-s | sort \-n \-r | head \-5
461: .DE
462: Here we have taken a list of our files sorted alphabetically,
463: each with the size in blocks.
464: We have run this to the standard input of the
465: .I sort
466: command asking it to sort numerically in reverse order (largest first).
467: This output has then been run into the command
468: .I head
469: which gives us the first few lines.
470: In this case we have asked
471: .I head
472: for the first 5 lines.
473: Thus this command gives us the names and sizes of our 5 largest files.
474: .PP
475: The notation introduced above is called the
476: .I pipe
477: mechanism.
478: Commands separated by `\||\|' characters are connected together by the
479: shell and the standard output of each is run into the standard input of the
480: next.
481: The leftmost command in a pipeline will normally take its standard
482: input from the terminal and the rightmost will place its standard
483: output on the terminal.
484: Other examples of pipelines will be given later when we discuss the
485: history mechanism;
486: one important use of pipes which is illustrated there is in the
487: routing of information to the line printer.
488: .NH 2
489: Filenames
490: .PP
491: Many commands to be executed will need the names of files as arguments.
492: \s-2UNIX\s0
493: .I pathnames
494: consist of a number of
495: .I components
496: separated by `/'.
497: Each component except the last names a directory in which the next
498: component resides, in effect specifying the
499: .I path
500: of directories to follow to reach the file.
501: Thus the pathname
502: .DS
503: /etc/motd
504: .DE
505: specifies a file in the directory
506: `etc'
507: which is a subdirectory of the
508: .I root
509: directory `/'.
510: Within this directory the file named is `motd' which stands
511: for `message of the day'.
512: A
513: .I pathname
514: that begins with a slash is said to be an
515: .I absolute
516: pathname since it is specified from the absolute top of the entire
517: directory hierarchy of the system (the
518: .I root ).
519: .I Pathnames
520: which do not begin with `/' are interpreted as starting in the current
521: .I "working directory" ,
522: which is, by default, your
523: .I home
524: directory and can be changed dynamically by the
525: .I cd
526: change directory command.
527: Such pathnames are said to be
528: .I relative
529: to the working directory since they are found by starting
530: in the working directory and descending to lower levels of directories
531: for each
532: .I component
533: of the pathname. If the pathname contains no slashes at all then the
534: file is contained in the working directory itself and the pathname is merely
535: the name of the file in this directory.
536: Absolute pathnames have no relation
537: to the working directory.
538: .PP
539: Most filenames consist of a number of alphanumeric characters and
540: `.'s (periods).
541: In fact, all printing characters except `/' (slash) may appear in filenames.
542: It is inconvenient to have most non-alphabetic characters in filenames
543: because many of these have special meaning to the shell.
544: The character `.' (period) is not a shell-metacharacter and is often used
545: to separate the
546: .I extension
547: of a file name from the base of the name.
548: Thus
549: .DS
550: prog.c prog.o prog.errs prog.output
551: .DE
552: are four related files.
553: They share a
554: .I base
555: portion of a name
556: (a base portion being that part of the name that is left when a trailing
557: `.' and following characters which are not `.' are stripped off).
558: The file
559: `prog.c'
560: might be the source for a C program,
561: the file `prog.o' the corresponding object file,
562: the file
563: `prog.errs' the errors resulting from a compilation of the program
564: and the file
565: `prog.output' the output of a run of the program.
566: .PP
567: If we wished to refer to all four of these files in a command, we could
568: use the notation
569: .DS
570: prog.*
571: .DE
572: This expression is expanded by the shell, before the command to which it is
573: an argument is executed, into a list of names which begin with `prog.'.
574: The character `*' here matches any sequence (including the empty sequence)
575: of characters in a file name.
576: The names which match are alphabetically sorted and placed in the
577: .I "argument list"
578: of the command.
579: Thus the command
580: .DS
581: echo prog.*
582: .DE
583: will echo the names
584: .DS
585: prog.c prog.errs prog.o prog.output
586: .DE
587: Note that the names are in sorted order here, and a different
588: order than we listed them above.
589: The
590: .I echo
591: command receives four words as arguments, even though we only typed
592: one word as as argument directly.
593: The four words were generated by
594: .I "filename expansion"
595: of the one input word.
596: .PP
597: Other notations for
598: .I "filename expansion"
599: are also available.
600: The character `?' matches any single character in a filename.
601: Thus
602: .DS
603: echo ? \|?? \|???
604: .DE
605: will echo a line of filenames; first those with one character names,
606: then those with two character names, and finally those with three
607: character names.
608: The names of each length will be independently sorted.
609: .PP
610: Another mechanism consists of a sequence of characters between `[' and `]'.
611: This metasequence matches any single character from the enclosed set.
612: Thus
613: .DS
614: prog.[co]
615: .DE
616: will match
617: .DS
618: prog.c prog.o
619: .DE
620: in the example above.
621: We can also place two characters around a `\-' in this notation to denote
622: a range.
623: Thus
624: .DS
625: chap.[1\-5]
626: .DE
627: might match files
628: .DS
629: chap.1 chap.2 chap.3 chap.4 chap.5
630: .DE
631: if they existed.
632: This is shorthand for
633: .DS
634: chap.[12345]
635: .DE
636: and otherwise equivalent.
637: .PP
638: An important point to note is that if a list of argument words to
639: a command (an
640: .I "argument list)"
641: contains filename expansion syntax, and if this filename expansion syntax
642: fails to match any existing file names, then the shell considers this
643: to be an error and prints a diagnostic
644: .DS
645: No match.
646: .DE
647: and does not execute the command.
648: .PP
649: Another very important point is that files with the character `.' at the
650: beginning are treated specially.
651: Neither `*' or `?' or the `[' `]' mechanism will match it.
652: This prevents accidental matching of the filenames `.' and `..'
653: in the working directory which have special meaning to the system,
654: as well as other files such as
655: .I \&.cshrc
656: which are not normally
657: visible.
658: We will discuss the special role of the file
659: .I \&.cshrc
660: later.
661: .PP
662: Another filename expansion mechanism gives access to the pathname of
663: the
664: .I home
665: directory of other users.
666: This notation consists of the character `~' (tilde) followed by another user's
667: login name.
668: For instance the word `~bill' would map to the pathname `/usr/bill'
669: if the home directory for `bill' was `/usr/bill'.
670: Since, on large systems, users may have login directories scattered over
671: many different disk volumes with different prefix directory names,
672: this notation provides a convenient way of accessing the files
673: of other users.
674: .PP
675: A special case of this notation consists of a `~' alone, e.g. `~/mbox'.
676: This notation is expanded by the shell into the file `mbox' in your
677: .I home
678: directory, i.e. into `/usr/bill/mbox' for me on Ernie Co-vax, the UCB
679: Computer Science Department VAX machine, where this document was prepared.
680: This can be very useful if you have used
681: .I cd
682: to change to another directory and have found a file you wish to
683: copy using
684: .I cp.
685: If I give the command
686: .DS
687: cp thatfile ~
688: .DE
689: the shell will expand this command to
690: .DS
691: cp thatfile /usr/bill
692: .DE
693: since my home directory is /usr/bill.
694: .PP
695: There also exists a mechanism using the characters `{' and `}' for
696: abbreviating a set of words which have common parts but cannot
697: be abbreviated by the above mechanisms because they are not files,
698: are the names of files which do not yet exist,
699: are not thus conveniently described.
700: This mechanism will be described much later,
701: in section 4.2,
702: as it is used less frequently.
703: .NH 2
704: Quotation
705: .PP
706: We have already seen a number of metacharacters used by the shell.
707: These metacharacters pose a problem in that we cannot use them directly
708: as parts of words.
709: Thus the command
710: .DS
711: echo *
712: .DE
713: will not echo the character `*'.
714: It will either echo an sorted list of filenames in the
715: current
716: .I "working directory,"
717: or print the message `No match' if there are
718: no files in the working directory.
719: .PP
720: The recommended mechanism for placing characters which are neither numbers,
721: digits, `/', `.' or `\-' in an argument word to a command is to enclose
722: it with single quotation characters `\'', i.e.
723: .DS
724: echo \'*\'
725: .DE
726: There is one special character `!' which is used by the
727: .I history
728: mechanism of the shell and which cannot be
729: .I escaped
730: by placing it within `\'' characters.
731: It and the character `\'' itself can be preceded by a single `\e'
732: to prevent their special meaning.
733: Thus
734: .DS
735: echo \e\'\e!
736: .DE
737: prints
738: .DS
739: \'!
740: .DE
741: These two mechanisms suffice to place any printing character into a word
742: which is an argument to a shell command. They can be combined, as in
743: .DS
744: echo \e\'\'*\'
745: .DE
746: which prints
747: .DS
748: \'*
749: .DE
750: since the first `\e' escaped the first `\'' and the `*' was enclosed
751: between `\'' characters.
752: .NH 2
753: Terminating commands
754: .PP
755: When you are executing a command and the shell is
756: waiting for it to complete there are several ways
757: to force it to stop.
758: For instance if you type the command
759: .DS
760: cat /etc/passwd
761: .DE
762: the system will print a copy of a list of all users of the system
763: on your terminal.
764: This is likely to continue for several minutes unless you stop it.
765: You can send an
766: \s-2INTERRUPT\s0
767: .I signal
768: to the
769: .I cat
770: command by typing ^C on your terminal.*
771: .FS
772: *On some older Unix systems the \s-2DEL\s0 or \s-2RUBOUT\s0 key
773: has the same effect. "stty all" will tell you the INTR key value.
774: .FE
775: Since
776: .I cat
777: does not take any precautions to avoid or otherwise handle this signal
778: the
779: \s-2INTERRUPT\s0
780: will cause it to terminate.
781: The shell notices that
782: .I cat
783: has terminated and prompts you again with `% '.
784: If you hit \s-2INTERRUPT\s0 again, the shell will just
785: repeat its prompt since it handles \s-2INTERRUPT\s0 signals
786: and chooses to continue to execute commands rather than terminating
787: like
788: .I cat
789: did, which would have the effect of logging you out.
790: .PP
791: Another way in which many programs terminate is when they get an end-of-file
792: from their standard input.
793: Thus the
794: .I mail
795: program in the first example above was terminated when we typed a ^D
796: which generates an end-of-file from the standard input.
797: The shell also terminates when it gets an end-of-file printing `logout';
798: \s-2UNIX\s0 then logs you off the system.
799: Since this means that typing too many ^D's can accidentally log us off,
800: the shell has a mechanism for preventing this.
801: This
802: .I ignoreeof
803: option will be discussed in section 2.2.
804: .PP
805: If a command has its standard input redirected from a file, then it will
806: normally terminate when it reaches the end of this file.
807: Thus if we execute
808: .DS
809: mail bill < prepared.text
810: .DE
811: the mail command will terminate without our typing a ^D.
812: This is because it read to the end-of-file of our file
813: `prepared.text' in which we placed a message for `bill' with an editor program.
814: We could also have done
815: .DS
816: cat prepared.text \||\| mail bill
817: .DE
818: since the
819: .I cat
820: command would then have written the text through the pipe to the
821: standard input of the mail command.
822: When the
823: .I cat
824: command completed it would have terminated,
825: closing down the pipeline
826: and the
827: .I mail
828: command would have received an end-of-file from it and terminated.
829: Using a pipe here is more complicated than redirecting input
830: so we would more likely use the first form.
831: These commands could also have been stopped by sending an \s-2INTERRUPT\s0.
832: .PP
833: Another possibility for stopping a command is to suspend its execution
834: temporarily, with the possibility of continuing execution later. This is
835: done by sending a \s-2STOP\s0 signal via typing a ^Z.
836: This signal causes all commands running on the terminal
837: (usually one but more if a pipeline is executing) to become suspended.
838: The shell notices that the command(s) have been suspended, types
839: `Stopped' and then prompts for a new command.
840: The previously executing command has been suspended, but otherwise
841: unaffected by the \s-2STOP\s0 signal. Any other commands can be executed
842: while the original command remains suspended. The suspended command can
843: be continued using the
844: .I fg
845: command with no arguments. The shell will then retype the command
846: to remind you which command is being continued, and cause the command
847: to resume execution. Unless any input files in use by the suspended
848: command have been changed in the meantime, the suspension has no effect
849: whatsoever on the execution of the command. This feature can be very useful
850: during editing, when you need to look at another file before continuing. An
851: example of command suspension follows.
852: .DS
853: % mail harold
854: Someone just copied a big file into my directory and its name is
855: ^Z
856: Stopped
857: % ls
858: funnyfile
859: prog.c
860: prog.o
861: % jobs
862: .ta 1.75i
863: [1] + Stopped mail harold
864: % fg
865: mail harold
866: funnyfile. Do you know who did it?
867: EOT
868: %
869: .so tabs
870: .DE
871: In this example someone was sending a message to Harold and forgot the
872: name of the file he wanted to mention. The mail command was suspended
873: by typing ^Z. When the shell noticed that the mail program was
874: suspended, it typed `Stopped' and prompted for a new command. Then the
875: .I ls
876: command was typed to find out the name of the file. The
877: .I jobs
878: command was run to find out which command was suspended. At this time the
879: .I fg
880: command was typed to continue execution of the mail program. Input
881: to the mail program was then continued and ended with a ^D
882: which indicated the end of the message at which time the mail
883: program typed EOT. The
884: .I jobs
885: command will show which commands are suspended.
886: The ^Z should only be typed at the beginning of a line since
887: everything typed on the current line is discarded when a signal is sent
888: from the keyboard. This also happens on \s-2INTERRUPT\s0, and \s-2QUIT\s0
889: signals. More information on
890: suspending jobs and controlling them is given in
891: section 2.6.
892: .PP
893: If you write or run programs which are not fully debugged then it may
894: be necessary to stop them somewhat ungracefully.
895: This can be done by sending them a \s-2QUIT\s0
896: signal, sent by typing a ^\e.
897: This will usually provoke the shell to produce a message like:
898: .DS
899: Quit (Core dumped)
900: .DE
901: indicating that a file
902: `core' has been created containing information about the running program's
903: state when it terminated due to the \s-2QUIT\s0 signal.
904: You can examine this file yourself, or forward information to the
905: maintainer of the program telling him/her where the
906: .I "core file"
907: is.
908: .PP
909: If you run background commands (as explained in section 2.6) then these
910: commands will ignore \s-2INTERRUPT\s0 and \s-2QUIT\s0 signals at the
911: terminal. To stop them you must use the
912: .I kill
913: command. See section 2.6 for an example.
914: .PP
915: If you want to examine the output of a command without having it move
916: off the screen as the output of the
917: .DS
918: cat /etc/passwd
919: .DE
920: command will, you can use the command
921: .DS
922: more /etc/passwd
923: .DE
924: The
925: .I more
926: program pauses after each complete screenful and types `\-\-More\-\-'
927: at which point you can hit a space to get another screenful, a return
928: to get another line, a `?' to get some help on other commands, or a `q' to end the
929: .I more
930: program. You can also use more as a filter, i.e.
931: .DS
932: cat /etc/passwd | more
933: .DE
934: works just like the more simple more command above.
935: .PP
936: For stopping output of commands not involving
937: .I more
938: you can use the
939: ^S key to stop the typeout. The typeout will resume when you
940: hit ^Q or any other key, but ^Q is normally used because
941: it only restarts the output and does not become input to the program
942: which is running. This works well on low-speed terminals, but at 9600
943: baud it is hard to type ^S and ^Q fast enough to paginate
944: the output nicely, and a program like
945: .I more
946: is usually used.
947: .PP
948: An additional possibility is to use the ^O flush output
949: character; when this character is typed, all output from the current
950: command is thrown away (quickly) until the next input read occurs
951: or until the next shell prompt. This can be used to allow a command
952: to complete without having to suffer through the output on a slow
953: terminal; ^O is a toggle, so flushing can be turned off by
954: typing ^O again while output is being flushed.
955: .NH 2
956: What now?
957: .PP
958: We have so far seen a number of mechanisms of the shell and learned a lot
959: about the way in which it operates.
960: The remaining sections will go yet further into the internals of the
961: shell, but you will surely want to try using the
962: shell before you go any further.
963: To try it you can log in to \s-2UNIX\s0 and type the following
964: command to the system:
965: .DS
966: chsh myname /bin/csh
967: .DE
968: Here `myname' should be replaced by the name you typed to
969: the system prompt of `login:' to get onto the system.
970: Thus I would use `chsh bill /bin/csh'.
971: .B
972: You only have to do this once; it takes effect at next login.
973: .R
974: You are now ready to try using
975: .I csh.
976: .PP
977: Before you do the `chsh' command, the shell you are using when
978: you log into the system is `/bin/sh'.
979: In fact, much of the above discussion is applicable to `/bin/sh'.
980: The next section will introduce many features particular to
981: .I csh
982: so you should change your shell to
983: .I csh
984: before you begin reading it.
985: .bp
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.