Annotation of 43BSDReno/old/man/newcsh.1, revision 1.1.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: .\"    @(#)newcsh.1    4.1 (Berkeley) 4/29/85
                      6: .\"
                      7: .TH NEWCSH 1 "4/1/81"
                      8: .UC 4
                      9: .bd S 3
                     10: .SH NAME
                     11: newcsh \- description of new csh features (over oldcsh)
                     12: .SH SYNOPSIS
                     13: .B csh
                     14: \fIcsh-options\fR
                     15: .SH SUMMARY
                     16: This is a summary of features new in
                     17: .IR csh (1)
                     18: in this version of the system; an older version of
                     19: .I csh
                     20: is available as
                     21: .I oldcsh.
                     22: This newer
                     23: .I csh
                     24: has some new process control primitives and a few other new features.
                     25: Users of
                     26: .I csh
                     27: must (and automatically) use the new terminal driver (summarized in
                     28: .IR newtty(4)
                     29: and completely described with the old in
                     30: .IR tty (4))
                     31: which allows generation of some new
                     32: interrupt signals from the keyboard which tell jobs to stop,
                     33: and arbitrates access to the terminal;
                     34: on CRT's the command ``stty crt'' is
                     35: normally placed in the
                     36: .I .login
                     37: file to be executed at login,
                     38: to set other useful modes of this terminal driver.
                     39: .PP
                     40: .B "Jobs."
                     41: .PP
                     42: The most important new feature in this shell is the control of
                     43: .I jobs.
                     44: A job is associated with each pipeline, where a pipeline is either
                     45: a simple command like ``date'', or a pipeline like ``who | wc''.
                     46: The shell keeps a table of current jobs, and assigns them small
                     47: integer numbers.
                     48: When you start a job in the background, the shell prints a line
                     49: which looks like:
                     50: .PP
                     51: \ \ \ \ [1] 1234
                     52: .PP
                     53: this indicating that the job which was started asynchronously with ``&''
                     54: is job number 1 and has one (top-level) process, whose process id is 1234.
                     55: The set of current jobs is listed by the
                     56: .I jobs
                     57: command.
                     58: .PP
                     59: If you are running a job and wish to do something else you may hit the
                     60: key ^Z (control-Z) which sends a
                     61: .I stop
                     62: signal to the current job.  The shell will then normally indicate that
                     63: the job has been ``Stopped'', and print another prompt.
                     64: You can then
                     65: put the job in the background with the command ``bg'', or run
                     66: some other commands and then return the job to the foreground with
                     67: ``fg''.
                     68: A ^Z takes effect immediately and is like an interrupt in that
                     69: pending output and unread input are discarded when it is typed.
                     70: There is another special key ^Y which does not generate a stop signal
                     71: until a program attempts to
                     72: .IR read (2)
                     73: it.
                     74: This can usefully be typed ahead when you have prepared some commands
                     75: for a job which you wish to stop after it has read them.
                     76: .PP
                     77: A job being run in the background will stop if it tries to read
                     78: from the terminal.  Background jobs are normally allowed to produce output,
                     79: but this can be disabled by doing ``stty tostop''.  If you set this
                     80: tty option, then background jobs will stop when they try to produce
                     81: output like they do when they try to read input.
                     82: .PP
                     83: There are several ways to refer to jobs in the shell.  The character
                     84: ``%'' introduces a job name.  If you wish to refer to job number 1, you can
                     85: name it as ``%1''.  Just naming a job brings it to the foreground; thus
                     86: ``%1'' is a synonym for ``fg %1'', bringing job 1 back into the foreground.
                     87: Similarly saying ``%1 &'' resumes job 1 in the background.
                     88: Jobs can also be named by prefixes of the string typed in to start them,
                     89: if these prefixes are unambiguous, thus ``%ex'' would normally restart
                     90: a suspended
                     91: .IR ex (1)
                     92: job, if there were only one suspended job whose name began with
                     93: the string ``ex''.  It is also possible to say ``%?string''
                     94: which specifies a job whose text contains
                     95: .I string,
                     96: if there is only one such job.
                     97: .PP
                     98: The shell also maintains a notion of the current and previous jobs.
                     99: In output pertaining to jobs, the current job is marked with a ``+''
                    100: and the previous job with a ``\-''.  The abbreviation ``%+'' refers
                    101: to the current job and ``%\-'' refers to the previous job.  For close
                    102: analogy with the
                    103: .I history
                    104: mechanism,
                    105: ``%%'' is also a synonym for the current job.
                    106: .PP
                    107: .B "Status reporting."
                    108: .PP
                    109: This shell learns immediately whenever a process changes state.
                    110: It normally informs you whenever a job becomes blocked so that
                    111: no further progress is possible, but only just before it prints
                    112: a prompt.  This is done so that it does not otherwise disturb your work.
                    113: If, however, you set the shell variable
                    114: .I notify,
                    115: the shell will notify you immediately of changes of status in background
                    116: jobs.
                    117: There is also a shell command
                    118: .I notify
                    119: which marks a single process so that its status changes will be immediately
                    120: reported.  By default 
                    121: .I notify
                    122: marks the current process;
                    123: simply say ``notify'' after starting a background job to mark it.
                    124: .PP
                    125: When you try to leave the shell while jobs are stopped, you will
                    126: be warned that ``You have stopped jobs.''  You may use the ``jobs''
                    127: command to see what they are.  If you do this or immediately try to
                    128: exit again, the shell will not warn you a second time, and the suspended
                    129: jobs will be unmercifully terminated.
                    130: .PP
                    131: .B "New builtin commands."
                    132: .HP 5
                    133: .B bg
                    134: .br
                    135: .ns
                    136: .HP 5
                    137: \fBbg\ %\fRjob\ ...
                    138: .br
                    139: Puts the current or specified jobs into the background, continuing them
                    140: if they were stopped.
                    141: .HP 5
                    142: .B fg
                    143: .br
                    144: .ns
                    145: .HP 5
                    146: \fBfg\ %\fRjob\ ...
                    147: .br
                    148: Brings the current or specified jobs into the foreground, continuing them if
                    149: they were stopped.
                    150: .HP 5
                    151: .B jobs
                    152: .br
                    153: .ns
                    154: .HP 5
                    155: .B "jobs \-l"
                    156: .br
                    157: Lists the active jobs; given the
                    158: .B \-l
                    159: options lists process id's in addition to the normal information.
                    160: .HP 5
                    161: \fBkill %\fRjob
                    162: .br
                    163: .ns
                    164: .HP 5
                    165: \fBkill\ \-\fRsig\ \fB%\fRjob\ ...
                    166: .br
                    167: .ns
                    168: .HP 5
                    169: \fBkill\fR\ pid
                    170: .br
                    171: .ns
                    172: .HP 5
                    173: \fBkill\ \-\fRsig\ pid\ ...
                    174: .br
                    175: .ns
                    176: .HP 5
                    177: \fBkill\ \-l\fR
                    178: .br
                    179: Sends either the TERM (terminate) signal or the
                    180: specified signal to the specified jobs or processes.
                    181: Signals are either given by number or by names (as given in
                    182: .I /usr/include/signal.h,
                    183: stripped of the prefix ``SIG'').
                    184: The signal names are listed by ``kill \-l''.
                    185: There is no default, saying just `kill' does not
                    186: send a signal to the current job.
                    187: If the signal being sent is TERM (terminate) or HUP (hangup),
                    188: then the job or process will be sent a CONT (continue) signal as well.
                    189: .HP 5
                    190: .B notify
                    191: .br
                    192: .ns
                    193: .HP 5
                    194: \fBnotify\ %\fRjob\ ...
                    195: .br
                    196: Causes the shell to notify the user asynchronously when the status of the
                    197: current or specified jobs changes; normally notification is presented
                    198: before a prompt.  All jobs are marked ``notify'' if the shell variable
                    199: ``notify'' is set.
                    200: .HP 5
                    201: \fBstop\ %\fRjob\ ...
                    202: .br
                    203: Stops the specified job which is executing in the background.
                    204: .HP 5
                    205: \fB%\fRjob
                    206: .br
                    207: Brings the specified job into the foreground.
                    208: .HP 5
                    209: \fB%\fRjob \fB&\fR
                    210: .br
                    211: Continues the specified job in the background.
                    212: .br
                    213: .ne 5
                    214: .PP
                    215: .B "Process limitations."
                    216: .PP
                    217: The shell provides access to an experimental facility for limiting
                    218: the consumption by a single process of system resources.
                    219: The following commands control this facility:
                    220: .HP 5
                    221: \fBlimit\fR \fIresource\fR \fImaximum-use\fR
                    222: .HP 5
                    223: \fBlimit\fR \fIresource\fR
                    224: .br
                    225: .ns
                    226: .HP
                    227: \fBlimit\fR
                    228: .br
                    229: Limits the consumption by the current process and each process
                    230: it creates to not individually exceed \fImaximum-use\fR on the
                    231: specified \fIresource\fR.  If no \fImaximum-use\fR is given, then
                    232: the current limit is printed; if no \fIresource\fR is given, then
                    233: all limitations are given.
                    234: .IP
                    235: Resources controllable currently include \fIcputime\fR (the maximum
                    236: number of cpu-seconds to be used by each process), \fIfilesize\fR
                    237: (the largest single file which can be created), \fIdatasize\fR
                    238: (the maximum growth of the data+stack region via
                    239: .IR sbrk (2)
                    240: beyond the end of the program text), \fIstacksize\fR (the maximum
                    241: size of the automatically-extended stack region), and \fIcoredumpsize\fR
                    242: (the size of the largest core dump that will be created).
                    243: .IP
                    244: The \fImaximum-use\fR may be given as a (floating point or integer)
                    245: number followed by a scale factor.  For all limits other than \fIcputime\fR
                    246: the default scale is ``k'' or ``kilobytes'' (1024 bytes);
                    247: a scale factor of ``m'' or ``megabytes'' may also be used.
                    248: For cputime the default scaling is ``seconds'', while ``m'' for minutes
                    249: or ``h'' for hours, or a time of the form ``mm:ss'' giving minutes
                    250: and seconds may be used.
                    251: .IP
                    252: For both \fIresource\fR names and scale factors, unambiguous prefixes
                    253: of the names suffice.
                    254: .HP 5
                    255: \fBunlimit\fR \fIresource\fR
                    256: .br
                    257: .ns
                    258: .HP 5
                    259: \fBunlimit\fR
                    260: .br
                    261: Removes the limitation on \fIresource\fR.  If no \fIresource\fR
                    262: is specified, then all \fIresource\fR limitations are removed.
                    263: .ne 5
                    264: .PP
                    265: .B "Directory stack."
                    266: .PP
                    267: This shell now keeps track of the current directory (which is kept
                    268: in the variable
                    269: .I cwd)
                    270: and also maintains a stack of directories, which is printed by the
                    271: command
                    272: .I dirs.
                    273: You can change to a new directory and push down the old directory
                    274: stack by using the command
                    275: .I pushd
                    276: which is otherwise like the 
                    277: .I chdir
                    278: command, changing to its argument.
                    279: You can pop the directory stack by saying
                    280: .I popd.
                    281: Saying
                    282: .I pushd
                    283: with no arguments exchanges the top two elements of the directory stack.
                    284: The elements of the directory stack are numbered from 1 starting at the top.
                    285: Saying
                    286: .I pushd
                    287: with a argument ``+\fIn\fR'' rotates the directory stack to make that entry
                    288: in the stack be at the top and changes to it.
                    289: Giving
                    290: .I popd
                    291: a ``+\fIn\fR'' argument eliminates that argument from the directory stack.
                    292: .PP
                    293: .B "Miscellaneous."
                    294: .PP
                    295: This shell imports the environment variable USER into the variable
                    296: .I user,
                    297: TERM into
                    298: .I term,
                    299: and
                    300: HOME into
                    301: .I home,
                    302: and exports these back into the environment whenever the normal
                    303: shell variables are reset.
                    304: The environment variable PATH is likewise handled; it is not
                    305: necessary to worry about its setting other than in the file
                    306: .I \&.cshrc
                    307: as inferior
                    308: .I csh
                    309: processes will import the definition of
                    310: .I path
                    311: from the environment, and re-export it if you then change it.
                    312: (It could be set once in the
                    313: .I \&.login
                    314: except that commands over the Berknet would not
                    315: see the definition.)
                    316: .PP
                    317: There are new commands
                    318: .I eval,
                    319: which is like the eval of the Bourne shell
                    320: .IR sh (1),
                    321: and useful with
                    322: .IR tset (1),
                    323: and
                    324: .I suspend
                    325: which stops a shell (as though a ^Z had stopped it; since
                    326: shells normally ignore ^Z signals, this command is necessary.)
                    327: .PP
                    328: There is a new variable
                    329: .I cdpath;
                    330: if set, then each directory in
                    331: .I cdpath
                    332: will be searched for a directory named in a
                    333: .I chdir
                    334: command if there is no such subdirectory of the current directory.
                    335: .PP
                    336: An
                    337: .I unsetenv
                    338: command removing environment variables has been added.
                    339: .PP
                    340: There is a new ``:'' modifier ``:e'', which yields the extension
                    341: portion of a filename.  Thus if ``$a'' is ``file.c'', ``$a:e'' is ``c''.
                    342: .PP
                    343: There are two new operators in shell expressions ``!~'' and ``=~'' which
                    344: are like the string operations ``!='' and ``=='' except that the right
                    345: hand side is a
                    346: .I pattern
                    347: (containing, e.g. ``*''s, ``?''s and instances of ``[...]'')
                    348: against which the left hand operand is matched.  This reduces the
                    349: need for use of the
                    350: .I switch
                    351: statement in shell scripts when all that is really needed is pattern matching.
                    352: .PP
                    353: The form ``$<'' is new, and is replaced by a line from the standard
                    354: input, with no further interpretation thereafter.  It may therefore
                    355: be used to read from the keyboard in a shell script.
                    356: .SH "SEE ALSO"
                    357: csh(1), killpg(2), sigsys(2), signal(2), jobs(3), sigset(3), tty(4)
                    358: .SH BUGS
                    359: Command sequences of the form ``a ; b ; c'' are not handled gracefully
                    360: when stopping is attempted.  If you suspend ``b'', the shell will then
                    361: immediately execute ``c''.  This is especially noticeable if this
                    362: expansion results from an
                    363: .I alias.
                    364: It suffices to place the sequence of commands in ()'s to force it to
                    365: a subshell, i.e. ``( a ; b ; c )'', but see the next bug.
                    366: .PP
                    367: Shell builtin functions are not stoppable/restartable.
                    368: .PP
                    369: Control over output is primitive;
                    370: perhaps this will inspire someone to work on a good virtual
                    371: terminal interface.  In a virtual terminal interface much more
                    372: interesting things could be done with output control.

unix.superglobalmegacorp.com

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