Annotation of 43BSDReno/old/man/newcsh.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: .\"    @(#)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.