Annotation of 43BSDReno/share/doc/usd/04.csh/csh.1, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.