4BSD/usr/man/cat1/newcsh.1

Compare this file to the similar file:
Show the results in this format:




NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



NAME
     newcsh - description of new csh features (over oldcsh)

SYNOPSIS
     csh _c_s_h-_o_p_t_i_o_n_s

SUMMARY
     This is a summary of features new in _c_s_h(1) in this version
     of the system; an older version of _c_s_h is available as
     _o_l_d_c_s_h. This newer _c_s_h has some new process control primi-
     tives and a few other new features.  Users of _c_s_h must (and
     automatically) use the new terminal driver (summarized in
     _n_e_w_t_t_y(_4) and completely described with the old in _t_t_y(4))
     which allows generation of some new interrupt signals from
     the keyboard which tell jobs to stop, and arbitrates access
     to the terminal; on CRT's the command ``stty crt'' is nor-
     mally placed in the ._l_o_g_i_n file to be executed at login, to
     set other useful modes of this terminal driver.

     Jobs.

     The most important new feature in this shell is the control
     of _j_o_b_s. A job is associated with each pipeline, where a
     pipeline is either a simple command like ``date'', or a
     pipeline like ``who | wc''.  The shell keeps a table of
     current jobs, and assigns them small integer numbers.  When
     you start a job in the background, the shell prints a line
     which looks like:

         [1] 1234

     this indicating that the job which was started asynchro-
     nously with ``&'' is job number 1 and has one (top-level)
     process, whose process id is 1234.  The set of current jobs
     is listed by the _j_o_b_s command.

     If you are running a job and wish to do something else you
     may hit the key ^Z (control-Z) which sends a _s_t_o_p signal to
     the current job.  The shell will then normally indicate that
     the job has been ``Stopped'', and print another prompt.  You
     can then put the job in the background with the command
     ``bg'', or run some other commands and then return the job
     to the foreground with ``fg''.  A ^Z takes effect immedi-
     ately and is like an interrupt in that pending output and
     unread input are discarded when it is typed.  There is
     another special key ^Y which does not generate a stop signal
     until a program attempts to _r_e_a_d(2) it.  This can usefully
     be typed ahead when you have prepared some commands for a
     job which you wish to stop after it has read them.

     A job being run in the background will stop if it tries to
     read from the terminal.  Background jobs are normally



Printed 11/10/80                                                1






NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



     allowed to produce output, but this can be disabled by doing
     ``stty tostop''.  If you set this tty option, then back-
     ground jobs will stop when they try to produce output like
     they do when they try to read input.

     There are several ways to refer to jobs in the shell.  The
     character ``%'' introduces a job name.  If you wish to refer
     to job number 1, you can name it as ``%1''.  Just naming a
     job brings it to the foreground; thus ``%1'' is a synonym
     for ``fg %1'', bringing job 1 back into the foreground.
     Similarly saying ``%1 &'' resumes job 1 in the background.
     Jobs can also be named by prefixes of the string typed in to
     start them, if these prefixes are unambiguous, thus ``%ex''
     would normally restart a suspended _e_x(1) job, if there were
     only one suspended job whose name began with the string
     ``ex''.  It is also possible to say ``%?string'' which
     specifies a job whose text contains _s_t_r_i_n_g, if there is only
     one such job.

     The shell also maintains a notion of the current and previ-
     ous jobs.  In output pertaining to jobs, the current job is
     marked with a ``+'' and the previous job with a ``-''.  The
     abbreviation ``%+'' refers to the current job and ``%-''
     refers to the previous job.  For close analogy with the _h_i_s_-
     _t_o_r_y mechanism, ``%%'' is also a synonym for the current
     job.

     Status reporting.

     This shell learns immediately whenever a process changes
     state.  It normally informs you whenever a job becomes
     blocked so that no further progress is possible, but only
     just before it prints a prompt.  This is done so that it
     does not otherwise disturb your work.  If, however, you set
     the shell variable _n_o_t_i_f_y, the shell will notify you immedi-
     ately of changes of status in background jobs.  There is
     also a shell command _n_o_t_i_f_y which marks a single process so
     that its status changes will be immediately reported.  By
     default _n_o_t_i_f_y marks the current process; simply say
     ``notify'' after starting a background job to mark it.

     When you try to leave the shell while jobs are stopped, you
     will be warned that ``You have stopped jobs.''  You may use
     the ``jobs'' command to see what they are.  If you do this
     or immediately try to exit again, the shell will not warn
     you a second time, and the suspended jobs will be unmerci-
     fully terminated.

     New builtin commands.

     bg




Printed 11/10/80                                                2






NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



     bg %job ...
          Puts the current or specified jobs into the background,
          continuing them if they were stopped.

     fg
     fg %job ...
          Brings the current or specified jobs into the fore-
          ground, continuing them if they were stopped.

     jobs
     jobs -l
          Lists the active jobs; given the -l options lists pro-
          cess id's in addition to the normal information.

     kill %job
     kill -sig %job ...
     kill pid
     kill -sig pid ...
     kill -l
          Sends either the TERM (terminate) signal or the speci-
          fied signal to the specified jobs or processes.  Sig-
          nals are either given by number or by names (as given
          in /_u_s_r/_i_n_c_l_u_d_e/_s_i_g_n_a_l._h, stripped of the prefix
          ``SIG'').  The signal names are listed by ``kill -l''.
          There is no default, saying just `kill' does not send a
          signal to the current job.  If the signal being sent is
          TERM (terminate) or HUP (hangup), then the job or pro-
          cess will be sent a CONT (continue) signal as well.

     notify
     notify %job ...
          Causes the shell to notify the user asynchronously when
          the status of the current or specified jobs changes;
          normally notification is presented before a prompt.
          All jobs are marked ``notify'' if the shell variable
          ``notify'' is set.

     stop %job ...
          Stops the specified job which is executing in the back-
          ground.

     %job
          Brings the specified job into the foreground.

     %job &
          Continues the specified job in the background.

     Process limitations.

     The shell provides access to an experimental facility for
     limiting the consumption by a single process of system
     resources.  The following commands control this facility:



Printed 11/10/80                                                3






NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



     limit _r_e_s_o_u_r_c_e _m_a_x_i_m_u_m-_u_s_e

     limit _r_e_s_o_u_r_c_e
     limit
          Limits the consumption by the current process and each
          process it creates to not individually exceed _m_a_x_i_m_u_m-
          _u_s_e on the specified _r_e_s_o_u_r_c_e.  If no _m_a_x_i_m_u_m-_u_s_e is
          given, then the current limit is printed; if no
          _r_e_s_o_u_r_c_e is given, then all limitations are given.

          Resources controllable currently include _c_p_u_t_i_m_e (the
          maximum number of cpu-seconds to be used by each pro-
          cess), _f_i_l_e_s_i_z_e (the largest single file which can be
          created), _d_a_t_a_s_i_z_e (the maximum growth of the
          data+stack region via _s_b_r_k(2) beyond the end of the
          program text), _s_t_a_c_k_s_i_z_e (the maximum size of the
          automatically-extended stack region), and _c_o_r_e_d_u_m_p_s_i_z_e
          (the size of the largest core dump that will be
          created).

          The _m_a_x_i_m_u_m-_u_s_e may be given as a (floating point or
          integer) number followed by a scale factor.  For all
          limits other than _c_p_u_t_i_m_e the default scale is ``k'' or
          ``kilobytes'' (1024 bytes); a scale factor of ``m'' or
          ``megabytes'' may also be used.  For cputime the
          default scaling is ``seconds'', while ``m'' for minutes
          or ``h'' for hours, or a time of the form ``mm:ss''
          giving minutes and seconds may be used.

          For both _r_e_s_o_u_r_c_e names and scale factors, unambiguous
          prefixes of the names suffice.

     unlimit _r_e_s_o_u_r_c_e
     unlimit
          Removes the limitation on _r_e_s_o_u_r_c_e.  If no _r_e_s_o_u_r_c_e is
          specified, then all _r_e_s_o_u_r_c_e limitations are removed.

     Directory stack.

     This shell now keeps track of the current directory (which
     is kept in the variable _c_w_d) and also maintains a stack of
     directories, which is printed by the command _d_i_r_s. You can
     change to a new directory and push down the old directory
     stack by using the command _p_u_s_h_d which is otherwise like the
     _c_h_d_i_r command, changing to its argument.  You can pop the
     directory stack by saying _p_o_p_d. Saying _p_u_s_h_d with no argu-
     ments exchanges the top two elements of the directory stack.
     The elements of the directory stack are numbered from 1
     starting at the top.  Saying _p_u_s_h_d with a argument ``+_n''
     rotates the directory stack to make that entry in the stack
     be at the top and changes to it.  Giving _p_o_p_d a ``+_n'' argu-
     ment eliminates that argument from the directory stack.



Printed 11/10/80                                                4






NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



     Miscellaneous.

     This shell imports the environment variable USER into the
     variable _u_s_e_r, TERM into _t_e_r_m, and HOME into _h_o_m_e, and
     exports these back into the environment whenever the normal
     shell variables are reset.  The environment variable PATH is
     likewise handled; it is not necessary to worry about its
     setting other than in the file ._c_s_h_r_c as inferior _c_s_h
     processes will import the definition of _p_a_t_h from the
     environment, and re-export it if you then change it.  (It
     could be set once in the ._l_o_g_i_n except that commands over
     the Berknet would not see the definition.)

     There are new commands _e_v_a_l, which is like the eval of the
     Bourne shell _s_h(1), and useful with _t_s_e_t(1), and _s_u_s_p_e_n_d
     which stops a shell (as though a ^Z had stopped it; since
     shells normally ignore ^Z signals, this command is neces-
     sary.)

     There is a new variable _c_d_p_a_t_h; if set, then each directory
     in _c_d_p_a_t_h will be searched for a directory named in a _c_h_d_i_r
     command if there is no such subdirectory of the current
     directory.

     An _u_n_s_e_t_e_n_v command removing environment variables has been
     added.

     There is a new ``:'' modifier ``:e'', which yields the
     extension portion of a filename.  Thus if ``$a'' is
     ``file.c'', ``$a:e'' is ``c''.

     There are two new operators in shell expressions ``!~'' and
     ``=~'' which are like the string operations ``!='' and
     ``=='' except that the right hand side is a _p_a_t_t_e_r_n (con-
     taining, e.g. ``*''s, ``?''s and instances of ``[...]'')
     against which the left hand operand is matched.  This
     reduces the need for use of the _s_w_i_t_c_h statement in shell
     scripts when all that is really needed is pattern matching.

     The form ``$<'' is new, and is replaced by a line from the
     standard input, with no further interpretation thereafter.
     It may therefore be used to read from the keyboard in a
     shell script.

SEE ALSO
     csh(1), killpg(2), sigsys(2), signal(2), jobs(3), sigset(3),
     tty(4)

BUGS
     Command sequences of the form ``a ; b ; c'' are not handled
     gracefully when stopping is attempted.  If you suspend
     ``b'', the shell will then immediately execute ``c''.  This



Printed 11/10/80                                                5






NEWCSH(1)           UNIX Programmer's Manual            NEWCSH(1)



     is especially noticeable if this expansion results from an
     _a_l_i_a_s. It suffices to place the sequence of commands in ()'s
     to force it to a subshell, i.e. ``( a ; b ; c )'', but see
     the next bug.

     Shell builtin functions are not stoppable/restartable.

     Control over output is primitive; perhaps this will inspire
     someone to work on a good virtual terminal interface.  In a
     virtual terminal interface much more interesting things
     could be done with output control.












































Printed 11/10/80                                                6