Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ csh(1) — DG/UX 4.30

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

printenv(1)

sh(1)

stty(1)

access(2)

exec(2)

fork(2)

killpg(2)

pipe(2)

umask(2)

wait(2)

jobs(3)

a.out(4)

editread(5)

environ(5)

tty(7)



     csh(1)                     DG/UX 4.30                      csh(1)



     NAME
          csh - invoke a shell (command interpreter) having a C-like
          syntax

     SYNOPSIS
          csh [ -bcefinstvVxX ] [ script ] [ arg ... ]

               script  The pathname of a file containing a C shell
                       script.

               arg     An argument to the script.

     DESCRIPTION
          The csh command invokes a C shell, a command interpreter,
          which was developed at the University of California at
          Berkeley.  The C shell is both a command line interpreter
          and a programming language, which allows you to compose
          executable shell scripts.

          The primary attributes of the C shell are job control,
          history, and aliasing.  The C shell also has predefined
          variables to prevent accidental file overwrites and log
          offs, and to disable filename expansion.

          Through the C shell, you can enable editread, an optional
          command line editor.  The editread history facility is
          similar to the C shell's, but its implementation and use are
          different.  Refer to editread(5) for more information.

          This man page covers the following csh topics:

            -  Command Line Options

            -  Initialization and Termination

            -  Command Line Words

            -  Quoting Special Characters

            -  Predefined Variables

            -  Built-in Commands

            -  Filename Completion

            -  History Substitution

            -  Aliasing

            -  Job Control

            -  Pipes, Sequential Command Processes, and Command Groups



     Licensed material--property of copyright holder(s)         Page 1





     csh(1)                     DG/UX 4.30                      csh(1)



            -  Input/Output Redirection

            -  Variables and Variable Substitution

            -  Command Substitution

            -  File Substitution

            -  Expressions and Operators

            -  Signal Handling and Status Reporting

            -  Parsing Order and Execution

        Command Line Options
          -b   Force a "break" from option processing.  Subsequent
               command-line arguments are not interpreted as C shell
               options.  This allows the passing of options to a
               script without confusion.  The shell does not run a
               set-user-ID script unless this option is present.

          -c   Reads commands from the first argument (a filename),
               which must be present.  Any remaining arguments on the
               command line are placed in the predefined shell
               variable argv, which stores the argument list.

          -e   Exits if any invoked command terminates abnormally or
               yields a non-zero exit status.

          -f   Fast start-up; does not search for or execute commands
               from the .cshrc file or the .login file (if in a login
               shell), thus reducing shell start-up time.

          -i   Forced interactive; prompts for input from the
               terminal, even if standard input does not appear to be
               a terminal (for example, a special character device).
               If a shell's I/O devices are terminals, interactive
               operation is assumed without having to set this option.

          -n   Parses but does not execute commands.  This may aid in
               syntactic checking of shell scripts.

          -s   Takes commands from standard input.

          -t   Takes one line of input to read and execute.  You can
               use a backslash (\) to escape each terminating new-line
               so that input can continue on the next line.

          -v   Sets the verbose predefined variable, which echoes a
               command's input after history substitution but before
               command execution.  See the section on Predefined
               Variables for more about the verbose predefined



     Licensed material--property of copyright holder(s)         Page 2





     csh(1)                     DG/UX 4.30                      csh(1)



               variable.

          -V   Sets the verbose variable before .cshrc is executed.

          -x   Sets the echo variable so that commands are echoed
               immediately before execution.

          -X   Sets the echo variable before .cshrc is executed.

        Initialization and Termination
          When you log in to the system, a shell executes the commands
          in these files:


          /etc/login.csh Executes only during login to the system; is
                         maintained by the system administrator.
                         Typically contains environment and local
                         shell variables.

          .cshrc         If it exists in your home directory, executes
                         at login and each time a shell executes a
                         script or creates a subshell.  Typically
                         contains aliases and local shell variables.

          .history       If it exists in your home directory, executes
                         at login, reading in a list of saved history
                         events into the current history list.

          .login         If it exists in your home directory, executes
                         following execution of .cshrc and only during
                         initial login.  Typically contains
                         environment variables, the umask settings
                         (default permissions assigned to user-created
                         files), stty settings, and other commands to
                         be executed at login only.

          .logout        If it exists in your home directory, executes
                         at logout only.

          After you have successfully logged in, an interactive shell
          will usually begin reading commands from the terminal,
          prompting with hostname% (dy default) for the ordinary user;
          hostname# for the superuser.

        Command Line Words
          The C shell splits input lines into words at blank(s),
          tab(s), and new-line(s).  Regardless of surrounding space,
          the following special characters are also recognized as
          words:






     Licensed material--property of copyright holder(s)         Page 3





     csh(1)                     DG/UX 4.30                      csh(1)



               space  tab  new-line Command argument separator.

               $                    Variable identifier.

               *  [ ]  ?  { }  ~    Filename expansion characters.

               < >  &  !            Redirection symbols.

               !  ^                 History characters.

               |                    Pipe.

               ;                    Command separator.

               ( )                  Command group.

               \  '  "              Quoting.

               `                    Command substitution.

               &                    Background execution.

          These words must be quoted (escaped) with a backslash (\) to
          inhibit their interpretation as special characters.

        Quoting Special Characters
          In addition to the backslash (\), you can also use the
          following characters to inhibit the interpretation of the
          special characters listed in the previous section:


               `command`            Command substitution; see the
                                    section on Command Substitution.

               'string'             String characters taken literally.

               "string"             Allows command substitution and
                                    variable substitution.

        Predefined Variables
          The predefined variables in this section have special
          meaning to the shell.  Of these, the shell automatically
          sets argv, cwd, home, path, prompt, shell and status. Except
          for cwd and status, the shell sets these variables only at
          login.

          You can set a variable as an environment variable (variable
          is exported to subshells) or a local shell variable
          (variable is known only to the current shell) using the set
          and setenv commands (covered in the section on Built-in
          Commands).  By convention, environment variables are set in
          uppercase characters, and local shell variables are set in



     Licensed material--property of copyright holder(s)         Page 4





     csh(1)                     DG/UX 4.30                      csh(1)



          lowercase characters.  (See the section on Variables and
          Variable Substitution for more information on how to set
          variables.)  Display local variables with the built-in
          command set.  Display environment variables with the
          printenv(1) command.

          The shell copies the environment variable TERM into term,
          HOME into home, and PATH into path and copies these back
          into the environment when a variable's value changes.

          Except for those predefined variables that the shell sets
          automatically, you must set explicitly all other predefined
          variables.  You set a variable by either declaring it or by
          assigning it a value, whichever is appropriate.  The
          predefined variables follow:

          argv           Contains the command line arguments supplied
                         to the current shell.  This variable contains
                         the values for the positional parameters,
                         referenced as $0, $1, $2, and so on, through
                         $9.  With argv, you can reference the first
                         item on the command line with argv[0], the
                         second item with argv[1], and so on, through
                         argv[9]; you can reference all arguments with
                         argv[*], and the number of arguments with
                         #argv.

          cdpath         Change directory path; contains a list of
                         alternate directory pathnames used by
                         commands (such as cd, chdir, and popd) when
                         searching for subdirectories.

          cshscript      Causes shell scripts that start with a pound
                         sign (#) to be interpreted by the C shell
                         instead of the Bourne shell.  If this option
                         is not set, only scripts that start with #!
                         /bin/csh will be interpreted by the C shell.
                         Setting this option provides compatibility
                         with other implementations of the C shell,
                         but Bourne shell scripts that start with a
                         pound sign (except for #! /bin/sh) will
                         probably break.

          cwd            Contains the full pathname of the current
                         working directory.

          echo           Causes each command and its arguments to be
                         echoed just before it is executed.  This is
                         set when the -x command line option is given
                         (see the -x option in the previous section on
                         Command Line Options).  This option can also
                         be set with the set echo command.



     Licensed material--property of copyright holder(s)         Page 5





     csh(1)                     DG/UX 4.30                      csh(1)



          fignore        A list of filename suffixes to ignore when
                         attempting filename completion.  Typically
                         the single word `.o'.

          filec          Enable filename completion, in which case the
                         CTRL-d character and the ESC character have
                         special significance when typed in at the end
                         of a terminal input line:

          histchars      Identifies a two-character string used as
                         history substitution metacharacters.  The
                         first character replaces the default history
                         substitution character, !.  The second
                         character replaces the quick substitution
                         character, ^.

          history        Specifies the number of history events
                         (commands issued from the command line) to be
                         saved in the history list.  A large number of
                         events saved in the history list can exceed
                         available shell memory.  If the history
                         variable is not set to a specific value, only
                         the last executed command is saved in the
                         history list.

          home           Specifies the user's home directory.  The
                         filename expansion of ~ refers to the value
                         of the home variable.

          ignoreeof      If set, makes the shell ignore the end-of-
                         file signal from terminal input devices.
                         Setting ignoreeof prevents accidental logouts
                         issued with <Ctrl-D>.

          mail           Defines file location(s) where the shell
                         checks for mail and the interval at which you
                         are notified of the arrival of new mail.  The
                         variable is specified in this form:


                         set mail = [n] mailfile-path [mailfile-path]

                         The optional n value specifies the mail-
                         checking interval in seconds and is used to
                         override the default, 600 seconds.

                         If new mail arrives, you are alerted with the
                         message, "You have new mail."  If a command
                         is being executed during the arrival of mail,
                         the message is postponed until the prompt
                         returns to the the terminal screen.  If
                         multiple mailfile paths are specified, you



     Licensed material--property of copyright holder(s)         Page 6





     csh(1)                     DG/UX 4.30                      csh(1)



                         are alerted with the message, "New mail in
                         mailfile-path."

          nobell         Suppress the bell during filename completion
                         when asking the C shell to extend an
                         ambiguous filename.

          noclobber      Restricts output redirection to ensure that
                         files are not accidentally destroyed or
                         "clobbered" (described in the section on
                         Input/Output Redirection).  It prevents you
                         from overwriting an existing file when using
                         the redirection symbol (>).  Also, it
                         prevents the creation of a new file when you
                         attempt to append output to a nonexistent
                         file when using the append output symbol
                         (>>).  Instead, error messages are displayed
                         to alert you to the problem.

          noglob         If set, inhibits global filename expansion.
                         Filename expansion metacharacters * ? [] ~ {}
                         are not recognized and are treated as literal
                         characters instead.  Setting noglob in shell
                         scripts is useful after filenames have been
                         expanded or when filename expansion is not
                         desired.  (Refer to the section on Filename
                         Substitution for more information on filename
                         expansion and metacharacters.)

          nonomatch      If set, inhibits the display of error
                         messages if commands containing filename
                         expansion fail to locate a matching pattern.
                         Malformed patterns, however, are considered
                         errors for which error messages are
                         displayed.  For example, the command, echo [,
                         returns an error.

          notify         If set, the shell notifies you asynchronously
                         of a job's completion.  The default is to
                         issue a job's completion message before the
                         prompt returns to the terminal screen.

          path           Specifies a list of directories that is
                         searched for an executable command.  If this
                         variable is not set, then only full pathnames
                         will execute.  The default search path is (.
                         /bin /usr/bin); however, the default varies
                         from system to system.  A null word specifies
                         the current directory.  For the superuser the
                         default search path is (/etc /bin /usr/bin).

                         A shell command with neither the -c nor the



     Licensed material--property of copyright holder(s)         Page 7





     csh(1)                     DG/UX 4.30                      csh(1)



                         -t options will normally hash the contents of
                         the directories in the path variable after
                         reading .cshrc, and each time the path
                         variable is reset.  If new commands are added
                         to these directories while the shell is
                         active, you may need to use the rehash
                         command to update the command list.

          prompt         Defines the string used by an interactive
                         shell as a prompt for your input.  If a !
                         appears in the prompt string, it will be
                         replaced by the current history event number
                         (assigned to each command issued from the
                         command line) unless a preceding \ is given.
                         (Refer to the section on History Substitution
                         for more information on the current event.)
                         The default is % for the normal user, or #
                         for the superuser.

          savehist       Specifies the number of events in the history
                         list saved in the .history file in your home
                         directory when you log out.  During shell
                         startup, the shell reads the contents of
                         .history into the history list.  A large
                         value for savehist slows down the shell
                         during startup.

          shell          Specifies the file in which the shell
                         resides.  The default is /bin/csh.

          status         Contains the status returned by the last
                         command.  If a command terminates abnormally,
                         then 0200 is added to the status.  Built-in
                         commands (those that do not execute as child
                         processes) that fail will return exit status
                         1; all other built-in commands set status 0.
                         (See the status command under Built-in
                         Commands.)

          time           Controls automatic timing of commands.  If
                         set, then any command requiring more than the
                         specified number of CPU seconds will print a
                         line when it terminates, giving user, system,
                         and real times and a utilization percentage
                         (the ratio of user plus system times to real
                         time).  (See the time command under Built-in
                         Commands.)

          verbose        Prints the words of each command after
                         history substitution.  This is set by the -v
                         command line option.




     Licensed material--property of copyright holder(s)         Page 8





     csh(1)                     DG/UX 4.30                      csh(1)



        Built-in Commands
          C shell built-in commands are executed within the shell.  If
          a built-in command is any component of a pipeline or a
          command group (except the last one), then it is executed in
          a subshell.

          alias name  definition
               An alias is an alternate name you can assign to an
               existing DG/UX system command.  This form of the alias
               command assigns the specified definition to the alias
               name. (See the section on Aliasing for more
               information.)

          bg
          bg %job ...
               The first form (without an argument) moves the last
               suspended job to the background for continued
               execution.  The second form puts the specified job into
               the background for continued execution.  (Refer to the
               section on Job Control for information.)

          break
               Interrupts a foreach or while loop.  break executes the
               remaining commands on the current line before it
               transfers control to the instruction following the end
               of the loop.

          breaksw
               Breaks from a switch, resuming after the endsw.

          case label:
               Specifies a label in a switch statement (discussed in a
               later paragraph about switch).

          cd
          chdir
          cd dir
          chdir dir
               The first and second forms change from the C shell's
               working directory to the user's home directory.  The
               third and fourth forms change the C shell's working
               directory to a directory named dir. If dir is not found
               as a subdirectory of the current directory (and does
               not begin with /, ./, or ../), then each component of
               the predefined variable cdpath is checked for a
               subdirectory named dir. If dir is a shell variable
               whose value begins with /, then the shell changes to
               this directory.  The second and fourth forms (the chdir
               expression) are the same as the first and third forms,
               respectively.

          continue



     Licensed material--property of copyright holder(s)         Page 9





     csh(1)                     DG/UX 4.30                      csh(1)



               Interrupts a while or foreach loop.  continue executes
               the remaining commands on the line before it transfers
               control to the end statement, which then sends control
               back to the top of the loop.

          default:
               Labels the default case in a switch statement.  The
               default should follow all case labels.

          dirs
               Prints the directory stack.  The first directory in the
               stack is the current directory.  With the -l argument,
               produce an unabbreviated printout; use of the ~
               notation is suppressed.  (See also pushd and popd later
               in this section.)

          echo wordlist
          echo -n wordlist
               The specified words are written to the shell's standard
               output, separated by spaces, and terminated with a
               new-line unless the -n option is specified, in which
               case the new-line is suppressed.

          else
          end
          endif
          endsw
               See the upcoming descriptions of foreach, if, switch,
               and while .

          eval arg ...
               The arguments are read as input to the shell and the
               resulting command(s) executed.  This is used usually to
               execute commands generated as the result of variable or
               command substitution (see the sections on Variables and
               Variable Substitution and Command Substitution),
               because parsing occurs before these substitutions.

          exec command
               Executes command in place of the current shell.

          exit
          exit (expr)
               Terminates the shell with either the value of the
               status variable (first form) or with the value of the
               specified expr (second form).

          fg
          fg %job ...
               Brings the current job (first form) or a specified job
               (second form) into the foreground for execution.




     Licensed material--property of copyright holder(s)        Page 10





     csh(1)                     DG/UX 4.30                      csh(1)



          foreach name (wordlist)
              ...
          end
               The variable name is set successively to each member of
               wordlist, and the sequence of commands between the
               foreach command and the matching end command are
               executed.  (Both foreach and end must appear on
               separate lines.)

          glob wordlist
               Performs filename expansion on a wordlist.  The glob
               command performs similarly to echo but no \ escapes are
               recognized.  Words are delimited by null characters in
               the output.

          goto label
               Unconditionally transfers control to a routine located
               in another part of the script which is identified with
               the specified label.  A colon (:) follows the label to
               signify the contents of the routine.  Program execution
               continues after the specified label.

          hashstat
               Prints a statistics line indicating the internal hash
               table's effectiveness at locating commands (and
               avoiding execution of the exec command).  Such an
               execution is attempted for each component of the path
               where the hash function indicates a possible hit, and
               in each component that does not begin with a /.

          history n
               History enables you to recall and re-execute previously
               issued commands that are saved in a list.  This form of
               the command lists n most recent items from the history
               list.  (See the section on History Substitution for
               more information.)

          if (expr) command
               If the specified expression evaluates to true, then the
               single command with arguments is executed.  Command
               must be simple; it cannot be a pipeline, a command list
               (separated by semicolons), or a command group
               (surrounded by parentheses).  Note that I/O redirection
               occurs even if expr is false and the command is not
               executed (this is a bug).  (See the later section on
               Pipes, Sequential Command Processes, and Command
               Groups.)

          if (expr) then
              ...
          else if (expr2) then
              ...



     Licensed material--property of copyright holder(s)        Page 11





     csh(1)                     DG/UX 4.30                      csh(1)



          else
              ...
          endif
               If the specified expr is true, then the commands
               following then (up to the first else if) are executed;
               if expr2 is true, then the commands following the
               second then (up to the second else) are executed, and
               so on.  Any number of else if pairs can be used, but
               only one else (optional) and one endif (required) can
               be used.  The words else and endif must appear at the
               beginning of input lines; the if must appear alone on
               its input line or after an else.

          jobs
               Enables you to list the active jobs that you can
               control through the job control facility.  (Refer to
               the section on Job Control for more information.)

          kill %job
               Terminates an active job that is identified by a
               specific number preceded by a percent sign (%).  (See
               the section on Job Control for more information.)

          limit
          limit resource
          limit resource maximum-use
          limit -h resource maximum-use
               Limits resource consumption for each process and each
               of its forked processes to no more than maximum-use on
               the specified resource.  If no maximum-use is given,
               then the current limit is printed; if no resource is
               given, then all limitations are given.

               -h   Use hard limits instead of the current limits.
                    Hard limits impose a ceiling on the values of the
                    current limits.  Only the privileged user may
                    raise the hard limits.

               Resource is one of the following:

                         cputime        Maximum number of CPU-seconds
                                        to be used by each process.

                         filesize       Largest single file that can
                                        be created.

                         datasize       Maximum growth of the data and
                                        stack for the process beyond
                                        the end of text.

                         stacksize      Maximum size of the stack for
                                        the process.



     Licensed material--property of copyright holder(s)        Page 12





     csh(1)                     DG/UX 4.30                      csh(1)



                         coredumpsize   Size of the largest core dump
                                        file that will be created.

                         memoryuse      Maximum size that a process'
                                        resident set size may grow to.

                         descriptors    Maximum number of open files
                                        that a process may have at one
                                        time.

                     Maximum-use can be a number (floating point or
                     integer) followed by a scale factor.

                         nk             (kilobytes); default for all
                                        limits other than cputime and
                                        descriptors.

                         nm             (megabytes); an alternative to
                                        kilobytes for all limits other
                                        than cputime and descriptors.

                         n              Default cputime limit in
                                        seconds.

                         nm             n minutes for cputime.

                         nh             n hours for cputime.

                         mm:ss          Minutes and seconds for
                                        cputime.

          login
               Terminates the current login shell, replacing it with
               an instance of /bin/login. This method of logging off
               is used for compatibility with the Bourne shell.

          logout
               Terminates a login shell, which is especially useful if
               ignoreeof is set.

          newgrp
               Changes the group identification of the caller; for
               details, see the newgrp(1) man page.  newgrp executes a
               new shell so that the previous shell state is lost.

          nice
          nice +number
          nice command
          nice +number command
          nice -number command
               Executes a process at a lower priority (or a higher
               priority for superusers only), which reduces the demand



     Licensed material--property of copyright holder(s)        Page 13





     csh(1)                     DG/UX 4.30                      csh(1)



               that the process makes on the system.  The "nice"
               number is the factor (4 by default) that is added to
               (or subtracted from) your job's priority. The higher
               the nice number, the lower the priority of a process.
               The nice priority values range from 0 to 39.  The
               default priority is 20.

               The first form sets the nice number for the current
               shell to 4 (the default), which means that the nice
               value would be 24.  The second form sets the priority
               to 20 + n.  The third form runs command at the default
               nice value.  The fourth form runs command at a priority
               of 20 + n.  The final form (for the superuser only)
               runs command at a priority of 20 - number.  The maximum
               changes to the nice value are:  nice + 19 and nice -
               20.

               This nice command is not the same as the one documented
               in the nice(1) manual page.  The nice(1) manual page
               documents the program /usr/bin/nice.

          nohup
          nohup command
               The first form can be used in shell scripts to ignore
               hangups for the remainder of the script.  The second
               form causes the specified command to run with hangups
               ignored. Command is always run in a subshell.  All
               processes run in the background (commands appended with
               &) are effectively run without hangups.

          notify
          notify %job ...
               If set, notifies you immediately when the status of the
               current job (first form) or a specified job (second
               form) changes; normally, notification is presented
               after a process has completed just before the prompt
               reappears on the screen.  (See the notify variable
               under Predefined Variables.)

          onintr
          onintr   -
          onintr  label
               Controls the action of the shell on interrupts.  The
               first form restores the default action of the shell,
               which is to terminate a shell script or to return to
               the terminal command input level.  The second form,
               onintr -, causes all interrupts to be ignored.  The
               final form causes the shell to execute a goto label
               when an interrupt is received or a child process
               terminates because it was interrupted.

               If the shell is running in the background (detached)



     Licensed material--property of copyright holder(s)        Page 14





     csh(1)                     DG/UX 4.30                      csh(1)



               and interrupts are being ignored, no form of onintr has
               meaning.  The shell and all invoked commands continue
               to ignore interrupts.

          popd
          popd  +n
               Pops the directory stack, returning to the new top
               directory.  With an argument +n, the nth entry in the
               stack is discarded.  The elements of the directory
               stack are numbered from 0, starting at the top.

          pushd
          pushd name
          pushd  +n
               With no arguments, pushd (first form) exchanges the top
               two elements of the directory stack and changes the
               current directory to the top directory. Given a name
                argument, pushd (second form) changes to the new
               directory and pushes the old current working directory
               onto the directory stack.  With a numeric argument,
               pushd +n (final form) rotates the nth argument of the
               directory stack to the top and changes to it.  The
               members of the directory stack are numbered from the
               top, starting at 0.

          rehash
               Recomputes the internal hash table of the contents of
               the directories in the path variable to account for new
               entries added while logged in.  This action is
               necessary only if you add commands (or scripts) to the
               directories in the path.

          repeat count command
               Repeats command count times.  I/O redirections occur
               exactly once, even if count is 0.

          set variable = value
               Assigns a value to shell variable.  (Refer to the
               section on Variables and Variable Substitution for more
               information.)

          setenv variable  value
               Assigns a value to environment variable.  (Refer to the
               section on Variables and Variable Substitution for more
               information.)  Display your environment variables with
               the printenv(1) command.

          shift
          shift variable
               In the first form, the components of argv are shifted
               to the left, discarding argv[1]. It is an error for
               argv to be set to null or to have no words as a value.



     Licensed material--property of copyright holder(s)        Page 15





     csh(1)                     DG/UX 4.30                      csh(1)



               The second form performs the same function on the
               specified variable.

          source file
          source -h file
               The first form reads commands from file. These commands
               may be nested; if they are nested too deeply, however,
               the shell can run out of file descriptors.  An error in
               a source at any level terminates all nested source
               commands.  Commands read from a file will not be added
               explicitly to the history list.  The -h option,
               however, (second form) will add the commands to the
               history list without being executed.

          stop %job ...
               Stops the specified job that is executing in the
               background.  (See the section on Job Control for more
               information.)

          suspend
               Interrupts the shell temporarily (until you execute a
               command to handle the suspended shell), much as if it
               had been sent a stop signal with <Ctrl-Z>.  This is
               most often used to stop shells started by su(1).

          switch (string)
          case  string1:
          commands
          breaksw
          case  string2:
          commands
          breaksw
          default:
          commands
          breaksw
          endsw
               Each case label (such as string1 and string2) is
               successively matched against the specified string. The
               file metacharacters *, ? and [...] may be used in the
               case labels, which are resolved to a filename.  If none
               of the labels match before a default label is found,
               then execution begins after the default label.  Each
               case label and the default label must appear at the
               beginning of a line.  The command breaksw continues
               execution after the endsw.  If no label matches and
               there is no default, execution continues after endsw.

          time
          time command
               With no argument (first form), prints a summary of time
               and system resources used by the current shell and
               subprocesses.  If arguments are given (second form),



     Licensed material--property of copyright holder(s)        Page 16





     csh(1)                     DG/UX 4.30                      csh(1)



               the specified simple command is timed and a summary of
               time and system resources used is printed.  The
               information is printed in seven fields.  An explanation
               of a "zero consumption" case with each field
               description follows:

               0.0u User time, in seconds.

               0.0s System time, in seconds.

               0:00 Real time, in minutes and seconds.

               0%   Rough approximation of the percentage of CPU
                    cycles used during real time, which is calculated
                    by adding system and user times and dividing the
                    sum by elapsed real time.

               0+0k Amount of shared and unshared memory-time, in
                    kilobyte-seconds, each separated by +.

               0+0io
                    Number of blocks input and output, each separated
                    by +.

               0pf+0w
                    Number of page faults (pf) and number of times the
                    process was swapped out to disk (w).

               If necessary, an additional shell is created to print
               the time statistic when the command completes.  The
               time variable, discussed in the section on Predefined
               Variables, can be set to a threshold; thereafter, time
               use information (system, user, real) is printed
               whenever any program or command exceeds that threshold.

          umask
          umask value
               Displays the three-digit octal mask value (first form)
               that identifies the access mode created for files and
               directories.  By default, all files are created with a
               umask value of 666; for directories, 777. The first
               digit identifies the owner's permissions; the middle
               digit, the group's permissions; the last digit,
               permissions for all other users.

               The second form is the octal mask value that the owner
               sets.  Each specified digit removes a specific
               permission; a value of 1 removes execute permission, 2
               removes write permission, and 4 turns off read
               permission.  As an example, an owner could deny the
               permission for group and other with a umask of 022,
               which yields a umask of 644 (owner has read and write



     Licensed material--property of copyright holder(s)        Page 17





     csh(1)                     DG/UX 4.30                      csh(1)



               permission, group has only read permission, and other
               has only read permission).  Values are additive; for
               example 6 turns off read and write permissions.

               Note that umask 000 is effectively umask 111; the shell
               creates files with a default permission of 666, which
               means that no one (not even the owner) has execute
               permission for the file.  Use chmod(1) to add execute
               permission.

          unalias pattern
               Deletes specified alias with a matching pattern.  You
               can delete all aliases using the filename metacharacter
               *.  For example, all aliases are removed with unalias
               *.  (See the section on Aliasing for more information.)

          unhash
               Disables the internal hash table.

          unlimit
          unlimit resource
          unlimit -h resource
               If no resource is specified (first form), then all
               resource limitations are removed.  (Refer to the limit
               command for information on resource names.)  Removes
               the limitation on resource (second form).

               -h      Remove corresponding hard limits.  Only the
                       privileged user may do this.

          unset name
               Deletes specified variable.

          unsetenv name
               Deletes specified environment variable.  (Refer to the
               setenv command in this section and the printenv(1)
               command for information on setting and displaying
               environment variables.)

          wait
               Delays some action until all background jobs are
               completed.  If the shell is interactive, an interrupt
               can disrupt the wait, at which time the shell lists all
               jobs and associated numbers that are in the background,
               suspended, or stopped.

          while (expr)
              ...
          end
               While the specified expr is true (evaluates to non-
               zero), the commands between the while and the matching
               end are executed.  The while expr and end must appear



     Licensed material--property of copyright holder(s)        Page 18





     csh(1)                     DG/UX 4.30                      csh(1)



               alone on a line each.  (See continue and break for
               information on interrupting a loop.)

          %job
          %job &
               Brings the specified job into the foreground (first
               form); continues the specified job in the background
               (second form).  (See the section on Job Control for
               more information.)

          @ variable = expr
               This form sets the specified variable equal to the
               value of expr. (See the section on Variables and
               Variable Substitution for more information.)

        Filename Completion
          When enabled by setting the variable filec, an interactive C
          shell can complete a partially typed filename or user name.
          When an unambiguous partial filename is followed by an ESC
          character on the terminal input line, the shell fills in the
          remaining characters of a matching filename from the working
          directory.

          If a partial filename is followed by the EOF character
          (usually typed as CTRL-d), the shell lists all filenames
          that match.  It then prompts once again, supplying the
          incomplete command line typed in so far.

          When the last (partial) word begins with a tilde (~), the
          shell attempts completion with a user name, rather than a
          file in the working directory.

          The terminal bell signals errors or multiple matches; this
          can be inhibited by setting the variable nobeep.  You can
          exclude files with certain suffixes by listing those
          suffixes in the variable fignore.  If, however, the only
          possible completion includes a suffix in the list, it is not
          ignored. fignore does not affect the listing of filenames by
          the EOF character.

        History Substitution
          History substitution allows you to recall, re-execute, and
          edit previously entered commands.  With this facility, you
          can repeat commands, repeat arguments of a previous command
          in the current command, or edit a previous command (for
          example, to fix spelling mistakes).  Command lines, known as
          history events, are saved in a history list, the length of
          which is controlled by the predefined history variable
          (refer to the section on Predefined Variables).

          History substitutions begin with the character !  and may
          begin anywhere in the input stream, as long as they do not



     Licensed material--property of copyright holder(s)        Page 19





     csh(1)                     DG/UX 4.30                      csh(1)



          nest.  You can change the value to another character and
          store it in predefined variable histchars.  The ! can be
          escaped with a \ to prevent its special meaning;  the ! is
          not interpreted as a special character if it is followed by
          a blank, tab, new-line, =, or (.  History substitutions can
          also be performed using the ^ character, discussed in the
          subsection on Event Modifiers.  Any input line that contains
          history substitution is expanded and echoed on the terminal
          before it is executed.

          set history = n
          history
          history n
          history -r n
          history -h n
               The first form sets the number of history events to be
               contained in the history list.  The second form prints
               a history list.  The third form prints only the n most
               recent events.  The fourth form reverses the order of
               the history list so that the more recent events are at
               the top of the list; the older events are at the
               bottom.  The final form prints the history list without
               leading numbers, which produces files suitable for
               using the -h option to the source command.

               An example of setting the history list length follows:

                    set history = 5

               Regardless of the number of command lines entered, the
               five most recent commands are saved in the list.
               Command lines are numbered sequentially from 1.  For
               example, event 6 would be maintained as the most recent
               event, and event 1 would be deleted, thus maintaining a
               constant length of 5.

               The second form prints a history list.  An example
               follows:

                     8  ls -l
                     9  write michael
                    10  vi write.c
                    11  cat oldwrite.c
                    12  diff write.c write.d

               The commands are shown with their event numbers, which
               can be used in the prompt by preceding the prompt
               string with a !.  An example follows:

                    % set prompt = '\! %'

          Event Designators



     Licensed material--property of copyright holder(s)        Page 20





     csh(1)                     DG/UX 4.30                      csh(1)



          An event designator is used to invoke an event from a
          history list.


               !                 Designates a history substitution,
                                 except when followed by a space, tab,
                                 new-line, =, or (.

               !!                Recalls the previous event just
                                 executed.

               !n                Recalls event n from the history
                                 list.

               !-n               Recalls event -n relative to the
                                 current event.

               !string           Recalls the most recent history event
                                 beginning with string.

               !?string?         Recalls the most recent history event
                                 containing the embedded string.

               !{string1}string2 Recalls the most recent history event
                                 matching string1 and appends string2
                                 to it.


          The following examples of event designators are based on the
          preceding history list given in this section.

               13% !!
               diff write.c write.d
               14% !9
               write michael
               15% !v
               vi write.c
               16% !?old?
               cat oldwrite.c
               17% !{d} > save.file
               diff write.c write.d > save.file

          Word Designators

          To select words from an event, follow the event designator
          by a colon (:) and a designator for the desired words.  The
          words of an input line are numbered from 0, the first word
          being 0 (the command), the second word (first argument)
          being 1, and so on.  The basic word designators are:

               0    First word, which is always the command.
               n    nth argument



     Licensed material--property of copyright holder(s)        Page 21





     csh(1)                     DG/UX 4.30                      csh(1)



               ^    Second word, which is the first argument.
               $    Last argument.
               %    Word matched by (immediately preceding) ?string? search.
               x-y  Range of words.
               -y   Abbreviates 0-y.
               *    Abbreviates ^-$, or nothing if only one word in event.
               x*   Abbreviates x-$.
               x-   Like x*, but without word $.

          The : separating the event designator from the word
          designator can be omitted if the word designator begins with
          a ^, $, *, - or %.

          Examples of word designators are based on the following
          history event:

               12% cd test ; ls | grep '\.h$'

               Command             Produces

               % !12:0             cd
               % !12:3             ls
               % !?rep?:% Bob names     grep Bob names
               % !12:0-1           cd test
               % !12:3*            ls | grep '\.h$'
               % echo !12:^  !$         echo test '\.h$'

          Word Modifiers

          A sequence of modifiers can follow the optional word
          designator.  Precede each with a :.  The following modifiers
          are defined:

          h             (head); removes a trailing pathname
                        component, leaving the head.
          r             (root); removes a trailing filename
                        extension, leaving the root name.
          e             (extension); removes all of the filename
                        except the extension.
          s/str1/str2/  (substitute); substitutes search pattern
                        str1 with replacement pattern str2.
          t             (tail); removes all leading pathname
                        components, leaving the tail.
          &             (repeat); repeats the previous substitution.
          g             (global); applies the change globally;
                        precedes other word modifiers; for example, g&.
          p             (print); prints the new command but does
                        not execute it.
          q             (quote); quotes the substituted words (no
                        further substitutions).
          x             Similar to q, but breaks into words at
                        spaces, tabs and new-lines.



     Licensed material--property of copyright holder(s)        Page 22





     csh(1)                     DG/UX 4.30                      csh(1)



          For substitutions, unless preceded by a g, only the first
          occurrence of the matched word str1 is modified.  An error
          results if no word is matched.

          The search string, signified by str2, is expressed using a
          literal string; regular expressions cannot be used.  Any
          character can replace / as a delimiter.  A \ can be used to
          quote the substitution delimiters separating str1 and str2
          to escape their meanings.  The & character, which stores the
          value contained in str1 is a legal value that can be used in
          str2.  The & construct modifies rather than replaces str2.
          The & can be quoted with a \ to preserve its literal
          meaning.  A null str1 uses the previous string from str2 or
          from a contextual scan string str in !?str?.  The trailing
          delimiter / in a substitution and the trailing ?  in a
          contextual scan may be omitted if a new-line follows
          immediately.

          The sequence ^str1^str2^ can be used as a shortcut for
          !!:s/str1/str2/.

          Examples of word modifiers are given based on the following
          event:

               4% ls /usr/della/test.1

               Command        Prints and Executes

               % ^della^eunice     ls /usr/eunice/test.1
               % !4:s/test.1/quiz  ls /usr/della/quiz
               % !4:h              ls /usr/della
               % !4:1:r       /usr/della/test
               % !4:s/test.1/re&/  ls /usr/della/retest.1
               % !4:p              ls /usr/della/test.1 (prints but
                                      doesn't execute)

        Aliasing
          You can assign alternate names to existing DG/UX system
          commands with the alias facility.  Specifically, you can
          rename a command, supply default arguments to a command, or
          construct new commands from existing ones.

          alias
          alias name
          alias name definition
          unalias pattern
               The first form of the command displays the current list
               of aliases. The second form lists the corresponding
               definition for the specified alias.  The third form
               assigns a simple definition to the alias.  The final
               form deletes an alias name matching the specified
               pattern.



     Licensed material--property of copyright holder(s)        Page 23





     csh(1)                     DG/UX 4.30                      csh(1)



          Aliases can also take user-supplied arguments, which require
          the use of the history facility.  An example follows:

               % alias man 'man \!* | more'

          The alias man is assigned a definition wherein the man
          command and a user-supplied argument, signified by !*, are
          piped through the more command.  The single quotation marks
          enclose the definition to prevent shell expansion.  Also,
          the \ escapes the !  to prevent it from being interpreted as
          you define the alias.

          When executing the man alias, you can enter an argument,
          which is placed automatically in the history list and is
          then retrieved and substituted into the alias command.  The
          !* expression refers to the previous history event (!) and
          the first through final arguments in that event (*).

        Job Control
          The C shell associates a numbered job with each executed
          command line to keep track of all commands in the background
          and all commands suspended temporarily (with <Ctrl-Z>).  In
          addition to starting a command in the background, with the
          shell job control facility, you can switch a job's
          processing between three states:  foreground, background,
          and suspension.  The form of a job started asynchronously
          with & follows:

               % command arg [ arg2 ] ...&
               [n] pid-number

          For example, if the pid-number is [1]1234, the number, 1,
          surrounded by square brackets would be the job number, which
          has one (top-level) process, and 1234 would be the process
          identifier.

          Listing Jobs


          jobs
          jobs -l
               The first form lists the active jobs.  The -l option
               (second form) lists PIDs, the job numbers,
               corresponding command lines, and status (running or
               stopped).  An example follows:

               % jobs
               [1] - Stopped  man jobs | more
               [2] + Stopped  cat large.out
               [3]   Running  /usr/bin/lp -w -s -t report &

          The shell maintains a list of the current and previous jobs.



     Licensed material--property of copyright holder(s)        Page 24





     csh(1)                     DG/UX 4.30                      csh(1)



          The current job is marked with a + and the previous job with
          a -.

          Manipulating Jobs

          There are several ways to manipulate jobs:

               %n   Refer to job number n.

               <Ctrl-Z>
                    Suspend foreground job.

               <Ctrl-Y>
                    Suspend foreground job when interactive read is
                    attempted.

               bg   Put job in background.

               fg   Put job in foreground.

               kill Terminate job.

               stop Suspend background job.


          %  %+  %%
          %-
          %n
          %?string
               Three ways of referring to the current job are
               specified in the first line.  For example, the command
               fg % puts the currently stopped job in the foreground.

               The second form (second line) refers to the previous
               job.  The command fg %- puts the first previous job in
               the foreground.

               The third form (third line) refers to an absolute job
               number.  The command fg %3 puts the third job in the
               foreground.

               The fourth form (fourth line) specifies an unambiguous
               string occurring at the beginning of the line.  The
               command fg %?/usr would put in the foreground the job
               containing the string "/usr" at the beginning of the
               line, which is the third job.  To manipulate a stopped
               job, you specify the current job with a + command
               preceded by a percent sign (%).  You specify the
               previous job with the - command preceded by a %.  After
               the current job (indicated by +) completes or moves to
               the foreground, the previous job (indicated by -)
               becomes the current job and assumes a + status.  If



     Licensed material--property of copyright holder(s)        Page 25





     csh(1)                     DG/UX 4.30                      csh(1)



               there were a third stopped job, it would become the
               previous job and assume a - status.

          <Ctrl-Z>
               Suspends temporarily a foreground job, which sends a
               STOP signal to the executing job.  The C shell should
               indicate that the job has been stopped by displaying a
               Stopped message followed by another prompt.  A <Ctrl-Z>
               takes effect immediately and behaves like an interrupt;
               pending output and unread input are discarded when
               typed in.

          <Ctrl-Y>
               The <Ctrl-Y> command does not generate a STOP signal
               until the executing job attempts an interactive read
               from the terminal.  Thus, you can issue the <Ctrl-Y>
               command during such a job's execution and the job will
               continue to execute until an interactive read from the
               terminal is attempted.  A background job stops if it
               tries to read from the terminal.  Conversely, however,
               a background job normally is allowed to produce output,
               but this can be disabled with the command stty tostop.
          bg
          bg %job...  The first form prints a list of jobs running in
               the background.  The second form puts the currently
               stopped job or a specified job into the background for
               continued execution.

          fg
          fg %job...  Brings the current job (first form) or a
               specified job (second form) into the foreground.

          kill -sig %job ...
          kill pid
          kill -sig pid ...
          kill -l
               Sends either the TERM (terminate) signal or the signal
               (sig) to either a specific process (pid) or a specific
               job number.  Signals are given either by number or name
               (as given in /usr/include/sys/signal.h, stripped of the
               prefix SIG).

               The kill -l command lists the signal names.  Using kill
               alone does not send a signal to the current job.  If
               the kill command sends either a TERM (terminate) or HUP
               (hangup) signal to a job or process, then it also sends
               a CONT (continue) signal.

          stop
          stop %job
               Stops the current job (first form) or the specified job
               (second form) that is executing in the background.



     Licensed material--property of copyright holder(s)        Page 26





     csh(1)                     DG/UX 4.30                      csh(1)



               Using stop 0 in a login shell (the one that you log in
               to) will hang your terminal.  Also, you must be using
               the Berkeley line discipline driver (berkstty) for
               stop and suspend signals to be handled properly.

        Pipes, Sequential Command Processes, and Command Groups
          command | command ...
          command ; command ; command ...
          ( command group )...
               The first form uses a pipe symbol (|); the second uses
               a set of sequential commands (;); the third signifies a
               command group (( )).

               The pipe symbol is used for connecting a series of
               simple commands to form a pipeline.  The output of each
               command in a pipeline is connected to the input of the
               next command.  To execute a sequence of pipelines
               without immediately waiting for the sequence to
               terminate, follow it with the & symbol, which executes
               the job in the background.

               An example of a pipeline follows (note that the quote
               marks are back quotes):

                    % echo There are `who | wc -l` users on the system today.

               The second form shows a sequence of commands separated
               by semicolons (;), which cause each command to be
               performed unconditionally from left to right in a
               sequential manner.  Commands can also be separated by
               || or &&, which represent conditional execution.  The
               expression on the right of one of these symbols is
               performed if the left expression (signified by ||) is
               false (failure) or if the left expression (signified by
               &&) is true (success).

               An example of conditional execution follows:


                    % grep "Using" filea && echo "I found it."

               If an instance of "Using" is found in filea, the
               expression would be considered true (success) and the
               expression to the right of && would be performed.

               The third form illustrates a command group, which can
               be composed of a pipeline or command sequence, enclosed
               in parentheses to form a part of a larger pipeline or
               command sequence.  A command group processes a set of
               commands in a subshell, establishing an environment
               separate from its parent, or puts a group of commands
               (processed sequentially) in the background.



     Licensed material--property of copyright holder(s)        Page 27





     csh(1)                     DG/UX 4.30                      csh(1)



               Examples of command grouping follow:


                    % ( cat test1 ; cat test2 ) > bigtest.out
                    % ( grep micro *.me > micro.out ; lp micro.out ) &

        Input/Output Redirection
          The following special characters are used to redirect
          standard input, standard output, or standard error from a
          command to a file.

          < filename
               Opens filename as standard input.

          << word
               Reads the shell's input up to a line that is identical
               to word. If word contains a special character (see
               section on Command Line Words), it will be interpreted
               unless escaped with a backslash (\).  Commands that are
               substituted have all blanks, tabs, and new-lines
               preserved, except for the final new-line, which is
               dropped.  The resultant text is placed in a temporary
               file that is given to the command as standard input.

          > filename  >& filename  >! filename  >&! filename
               Angle bracket (>) signifies a redirection of standard
               output to filename.  If filename does not exist, then
               it is created.  If the file exists, it is overwritten;
               its previous contents are lost (first form).

               The second form redirects standard output and standard
               error (diagnostic output) to filename.  The terminal is
               standard error by default.  If filename exists, it is
               overwritten; its previous contents are lost.

               If the noclobber variable is set when using either the
               first or second forms, it prevents the shell from
               redirecting output to an existing file and issues an
               error message instead.  setting the noclobber variable
               prevents accidental file overwriting of files that
               already exist.  Note that noclobber permits redirection
               to terminals and /dev/null.

               Alternatively, it is possible to override the noclobber
               setting with the ! symbol.  The third form, >!, allows
               an existing file to be overwritten.  The final form,
               >&!, overwrites an existing file with standard output
               and standard error.

          >> filename  >>& filename  >>! filename  >>&! filename
               Appends standard output to a file (first form).  It is
               similar to the > notation but appends to, rather than



     Licensed material--property of copyright holder(s)        Page 28





     csh(1)                     DG/UX 4.30                      csh(1)



               creates, a file.  If the file does not already exist,
               it is created.

               The second form appends standard output and standard
               error (diagnostic output) to filename.

               If the noclobber variable is set when using either the
               first or second forms, and if a file does not already
               exist, an error message is issued and no output is
               appended to a file.

               Alternatively, it is possible to override the noclobber
               setting with the ! symbol.  The third form, >>!,
               creates a file if one does not already exist.
               Likewise, the final form, >>&!, creates a file if one
               does not already exist.

        Variables and Variable Substitution
          There are two types of variables that the C shell maintains:
          predefined and user-defined.  The C shell automatically sets
          some predefined variables; others you can set (refer to the
          previous section on Predefined Variables for more
          information).  User-defined variables can be restricted to
          the current shell (local variables) or exported to the
          environment (environment variables).  Also, user variables
          can be defined as string or numeric.   All variables have a
          name and a corresponding value of one or more words.  A
          user-defined variable name can consist of as many as 251
          characters (alphabetic and numeric and the underscore
          character).

          A reference to the value of a variable begins with $, which
          is a signal to the shell to interpret the dollar sign and
          the adjacent expression as a variable.  The shell then
          expands the variable, effectively substituting the variable
          with its corresponding value.

          You can suppress variable substitution by preceding the $
          with a backslash (\), except within double quotation marks
          ("), which allow variable substitution.  Single quotation
          marks (') suppress variable substitution.  A $ is
          interpreted literally if followed by a space, tab, or new-
          line.  Also, braces ({ }) can be used to insulate a variable
          name from subsequent adjacent characters (for example,
          ${VAR}).

          Metasequences introduce variable values into the shell
          input.  Except as noted, referencing an unset variable is an
          error.  Most of the metasequences covered in this section
          can be modified using a set of word modifiers introduced in
          the Word Modifiers subsection of the History Substitution
          section in this manual page.  These modifiers (:h, :gh, :t,



     Licensed material--property of copyright holder(s)        Page 29





     csh(1)                     DG/UX 4.30                      csh(1)



          :gt, :r, :gr, :q and :x) can be applied to some variable
          metasequences.  If braces { } appear in the command form,
          the modifiers must appear within the braces.  Only one :x
          modifier is allowed on each $ expansion.  The following
          metasequences can be modified:


          $var
          ${var}
               In the first form, var is replaced by the word(s) of
               the value of variable var, each separated by a blank.
               Braces insulate var from following characters that
               would otherwise be part of it (second form).  If var is
               not a local shell variable, but an environment
               variable, then that value is returned (but :x modifiers
               and the other forms given as follows are not available
               in this case).

          $var[index]
          ${var[index]}
               Selects only the specified word, represented by index,
               from var.  The index value can be represented by a
               single number or two numbers separated by a dash (-) to
               indicate a range.  The first word of a variable's value
               is numbered 1.  If the first number of a range is
               omitted, it defaults to 1.  If the last member of a
               range is omitted, it defaults to $#var (see the next
               item).  The argument, *, selects all words.  It is not
               an error for a range to be empty if the second argument
               is omitted or within range.

          $#var
          $#{var}
               Gives the number of words in the variable, which is
               useful with wordlists.

          $number
          ${number}
               Is equivalent to $argv[number].  Substitutes the value
               corresponding to the positional parameter given in the
               command line.  For example, $0 refers to the command
               name, $1 refers to the first argument, $2 refers to the
               second argument, and so on.

          $*
          ${*}
               Is equivalent to $argv[*], which refers to all
               arguments.

               The following metasequences cannot be modified.





     Licensed material--property of copyright holder(s)        Page 30





     csh(1)                     DG/UX 4.30                      csh(1)



          $?var
          ${?var}
               Returns the value of 1 if var is set; 0 if var is not
               set.

          $?0
               Returns the value of 1 if the current input filename is
               known, 0 if it is not set.

          $$
               Substitutes the (decimal) process number of the
               (parent) shell.

          $<
               Substitutes a line from the standard input, with no
               further interpretation.  A shell script can use this
               form to read from standard input.

               Commands for Setting Variables

          set
          set name ...
          set name = word
          set name[index] = word
          set name = (wordlist)
               The first form of the command lists the values of all
               variables.  Values that form a list of multiple words
               are surrounded with parentheses.  The second form sets
               name equal to the null string.  The third form sets
               name equal to the single word. The fourth form sets the
               nth component of name (specified by index) equal to
               word.  Before you can assign a single index value to a
               variable, the variable must exist.  The final form sets
               name equal to the list of space-separated words in
               wordlist. In all forms, the value is command- and
               filename-expanded before it is assigned.

               These arguments may be repeated to set multiple values
               in a single set command.  Note, however, that variables
               in arguments are expanded before they are set.

          setenv name value
               Sets the value of environment variable name equal to
               value, a single word.  Two commonly used environment
               variables, TERM and PATH, are automatically imported to
               and exported from the C shell local variables, term and
               path.  Setting these variables in the environment is
               unnecessary.

          @
          @ name = expr
          @ name[index] = expr



     Licensed material--property of copyright holder(s)        Page 31





     csh(1)                     DG/UX 4.30                      csh(1)



               The first form lists the values of all shell variables.
               The second form sets the specified name equal to the
               value of expr.  If expr contains one of these four
               characters:  <, >, &, or |, then at least this part of
               the expression must be placed within parentheses ( ).

               The third form assigns the value of expr equal to the
               argument specified by the index of name.  Both name and
               the index argument must already exist.

               Other assignment operators in addition to = can be
               used.  (Refer to the section on Expressions and
               Operators for more information.)

          unset name ...
               Deletes specified variable.

          unsetenv name ...
               Deletes specified environment variable.  (See also
               printenv(1) for more information.)

        Command Substitution
          The output produced by a command can be substituted as an
          argument to some other command on the same command line.
          The command to be substituted is surrounded by backquotes
          (``).

          `command`
               Executes the backquoted command (`command`) and
               substitutes the result in the command line before
               executing the entire command line.

               Command substitution is performed in a subshell.  The
               output from such a command is normally broken into
               separate words at spaces, tabs, and new-lines.  Null
               words are discarded.

               Within double quotation marks (" "), only new-lines
               force new words; spaces and tabs are preserved.

               The single, final new-line does not force a new word.
               Note that it is thus possible for a command
               substitution to yield only a partial word, even if the
               command outputs a complete line.

               An example follows:

                    % echo The date of today is:  `date`
                    The date of today is:  Mon Aug 29 16:59:57 EST 1988

        Filename Substitution
          Words containing any of these characters (*, ?, [, or {) or



     Licensed material--property of copyright holder(s)        Page 32





     csh(1)                     DG/UX 4.30                      csh(1)



          beginning with the character (~) are candidates for filename
          expansion.  Such a word represents a pattern that is matched
          and consequently replaced with an alphabetically sorted list
          of filenames containing the matched pattern.

          *    Matches zero or more character(s) in a filename.

          ?    Matches any single character in a filename.  For
               example, the ls oct.?  command may produce this result:
               oct.1, oct.2, and oct.9, but not oct.12.

          [...]
               Matches any single character from the enclosed list,
               which is referred to as a character class.  A list can
               also be expressed as a range, which is designated by
               two characters separated by a hyphen (-).  The elements
               forming the beginning and end of a range must follow
               the ASCII collation sequence; as examples, a-z and 1-4.
               For example, the ls *.[123] may produce this result:
               oct.1, oct.2, and oct.3, but not oct.4.

          ~    Expands to the user's home directory, which is defined
               by the home shell variable.  When the tilde is followed
               by a name consisting of alphabetic and numeric
               characters or the hyphen (-), the shell searches for
               the user's home directory and substitutes it in place
               of ~.  For example, ~ken might expand to /usr/ken and
               ~ken/chmach to /usr/ken/chmach.  If the ~ is followed
               by a character that is not alphabetic or numeric, or a
               hyphen, or if the ~ does not appear at the beginning of
               a word, it is left undisturbed.

          {...}
               Rather than having to type multiple full pathnames that
               contain a common component, you can type the commonly
               shared component only once and enclose the unique
               filename fragments in brackets.  A comma follows each
               filename fragment.

               This expression a{b,c,d}e is shorthand for abe ace ade.
               Left-to-right order is preserved.  This construct may
               be nested.  Thus,

               ~source/s1/{oldls,ls}.c

               may expand to

               /usr/source/s1/oldls.c  /usr/source/s1/ls.c

               Successful filename expansions do not imply that the
               expanded filenames exist.




     Licensed material--property of copyright holder(s)        Page 33





     csh(1)                     DG/UX 4.30                      csh(1)



               As a special case {, } and {} are passed undisturbed.

        Expressions and Operators
          Some of the built-in commands (see the section on Built-in
          Commands) take expressions as arguments, in which the
          operators are similar to those of the C language, with the
          same precedence.  These expressions appear in the @, exit,
          if, and while commands, which are used to control the flow
          of executing commands.

          Strings beginning with 0 are considered octal numbers.  Null
          or missing arguments are considered 0.  The results of all
          expressions are strings, which represent decimal numbers.
          It is important to note that no two components of an
          expression can appear in the same word.  In most cases these
          characters (&, |, <, >, (, and )) should be surrounded by
          spaces.

          The following operators are grouped in order of precedence.

               (...)
                    Change precedence.

               ~    Perform 1's complement.

               !    Logically negate.

               *  /  %
                    Multiply, divide, modulo.

               +  - Add, subtract.

               <<  >>
                    Bitwise shift left, bitwise shift right.

               <  >  <=  >=
                    Less than, greater than, less than or equal to,
                    greater than or equal to.

               ==  !=  =~  !~
                    Equal to, not equal to, filename substitution
                    match, filename substitution pattern mismatch.
                    The operators, =~ and !~, check for a match
                    between the string on the left of the expression
                    and a filename substitution pattern on the right
                    of the expression.  These two operators reduce the
                    need for use of the switch statement in shell
                    scripts when pattern-matching between strings is
                    all that is needed.

               &    Bitwise AND.




     Licensed material--property of copyright holder(s)        Page 34





     csh(1)                     DG/UX 4.30                      csh(1)



               ^    Bitwise XOR (exclusive or).

               |    Bitwise inclusive OR.

               &&   Logical AND.

               ||   Logical OR.

          The assignment operators are given as follows:

               ++   Increment.
               --   Decrement.
               =    Assign.
               *=   Multiply left side by right side and update left side.
               /=   Divide left side by right side and update left side.
               +=   Add left side to right side and update left side.
               -=   Subtract left side from right side and update left side.
               ^=   Exclusive OR left side to right side and update left side.
               %=   Modulo; divide left side by right side and update left
                    side with remainder.

          File status operators are available in the form -l filename,
          where l is one of the following values:

               -r filename    Read access.
               -w filename    Write access.
               -x filename    Execute access.
               -e filename    Existence.
               -o filename    Ownership.
               -z filename    Zero size.
               -f filename    Plain file.
               -d filename    Directory.

          The specified filename is command- and filename-expanded and
          then tested for the file's status with regard to the user
          (for example, do you have write access?).  If the file does
          not exist or is inaccessible, then all inquiries return a
          false value (0).

          You can use a command as a boolean component in an
          expression.  The status returned by the executing command
          determines the value of the expression.  Successful command
          execution returns a true (0) value; failure returns a false
          (non-zero) value.  The command name should appear in braces
          delimited by spaces (like { /bin/m88k }).

          An example of using a file status expression in a shell
          script follows:

               echo "Enter a filename:"
               set file = $<
               if (-r $file && -w $file && -x $file) then



     Licensed material--property of copyright holder(s)        Page 35





     csh(1)                     DG/UX 4.30                      csh(1)



                    echo "$file is readable, writable, and executable."
               else
                    echo "$file doesn't have correct permissions."
               endif


        Signal Handling and Status Reporting
          The shell normally ignores quit signals.  Background jobs
          running either by the & symbol, the bg command, or %job&
          command are immune to signals generated from the keyboard,
          including hangups.  Other signals have values that the shell
          inherits from its parent.  The shell's handling of interrupt
          and terminate signals in shell scripts can be controlled by
          the onintr commands.  Log-in shells catch the terminate
          signal; otherwise, this signal is passed to children from
          the state in the shell's parent.  Interrupts are not allowed
          when a login shell is reading the file .logout.

          The shell learns immediately whenever a process changes
          state.  It normally informs you when a job becomes blocked
          and prevents further progress, but only just before it
          prints a prompt so as to avoid disturbing your work.
          However, if the shell variable notify is set, the shell
          notifies you immediately of status changes in background
          jobs.  There is also a shell command notify that marks a
          single process so that its status changes will be reported
          immediately.  By default, notify marks the current process;
          after starting a background job, you can issue the notify
          command to mark it.

          If you try to exit the shell while jobs are stopped, the
          shell displays a message indicating that there are stopped
          jobs.  You can issue the built-in jobs command to list the
          currently stopped jobs.  If you again attempt to terminate
          the shell while jobs are stopped, the shell will not issue a
          second warning, but will terminate the stopped jobs.

        Parsing Order and Execution
          The order in which the shell deals with special characters
          on the command line affects the result produced.  Here are
          the steps of the parsing process:


          History substitution        Expands the ! and ^ history
                                      metacharacters.

          Line parsing                Divides the command line into
                                      words, numbering the first item
                                      0; the second item, 1, and so
                                      on.

          History update              Places the command line in the



     Licensed material--property of copyright holder(s)        Page 36





     csh(1)                     DG/UX 4.30                      csh(1)



                                      history list, allowing access to
                                      specific events and words.

          Word parsing                Performs six separate steps, as
                                      follows:

               ' and " resolution
                    Both forms quote (prevent interpretation of)
                    special characters for filename expansion,
                    redirection, background execution, and pipes.
                    Only single quotation marks (' ') quote variable
                    expansion and command substitution special
                    characters.  Also, to prevent interpretation of
                    the history metacharacter, !  must be quoted
                    within single quotation marks.

               Alias substitution
                    Substitutes an alias with its assigned executable
                    command.

               <, >, <<, >>, &, and | recognition
                    Recognizes these metacharacters but does not
                    process them.

               Variable substitution
                    Expands variables to assigned values.

               Command substitution
                    Executes any command within backquotes (``) and
                    substitutes the result in standard output on the
                    command line.

               Filename substitution
                    Expands filenames according to the filename
                    metacharacters used.

          Command Execution           After parsing occurs, the shell
                                      executes commands (informing the
                                      DG/UX system of the command to
                                      locate and the files to use for
                                      input and output).

     FILES
          /etc/login.csh      Is read at login.
          ~/.cshrc            Is read at beginning of execution by
                              each shell.
          ~/.login            Is read by login shell, after ~/.cshrc
                              at login.
          ~/.logout           Is read by login shell, at logout.
          /bin/sh             Identifies the standard shell (for shell
                              scripts not starting with #! /bin/csh)
          /tmp/sh*            Identifies the temporary file for <<.



     Licensed material--property of copyright holder(s)        Page 37





     csh(1)                     DG/UX 4.30                      csh(1)



          /etc/passwd         Specifies the source of home directories
                              for ~username.
          ~/.history          Contains the current history list saved
                              at logout.

     LIMITATIONS
          A word cannot exceed 1024 characters.  The DG/UX system
          limits an argument list to 10,240 characters.  The number of
          arguments to a command that involves filename expansion is
          limited to 1/6 the number of characters allowed in an
          argument list.  Command substitutions may substitute no more
          characters than are allowed in an argument list.  To detect
          looping, the C shell restricts the number of alias
          substitutions on a single line to 20.

     SEE ALSO
          printenv(1), sh(1), stty(1), access(2), exec(2), fork(2),
          killpg(2), pipe(2), umask(2), wait(2), jobs(3), a.out(4),
          editread(5), environ(5), and tty(7).

     NOTES
          When a command is restarted from a stop, the shell prints
          the directory it started in if different from the current
          directory; this can be misleading, since the job may have
          changed directories internally.

          If a process reading from a pipe ends before the process
          writing to the pipe, a harmless "Broken Pipe" error message
          is printed.  Example:  ls -l | head in a large directory.

          Shell built-in functions cannot be stopped and then
          restarted.  Command sequences of the form "a ; b ; c" also
          are not handled gracefully when you attempt to stop them.
          If you suspend b, the shell will then immediately execute c.
          This is especially noticeable if this expansion results from
          an alias.  You can place the sequence of commands in
          parentheses to force it to a subshell.  For example, "( a ;
          b ; c )" will suffice.

          Control over tty output after processes are started 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.

          Alias substitution is most often used to clumsily simulate
          shell procedures; shell procedures should be provided rather
          than aliases.

          Commands within loops, prompted for by ?, are not placed in
          the history list.  Control structure should be parsed rather
          than be recognized as built-in commands.  Such a change



     Licensed material--property of copyright holder(s)        Page 38





     csh(1)                     DG/UX 4.30                      csh(1)



          would allow you to place the control commands anywhere, to
          combine control structure with pipes (|), and to use with
          commands executed in the background (&) and sequentially
          (;).

          It should be possible to use the : word modifiers on the
          output of command substitutions.  Furthermore, multiple
          modifiers (at least more than one) should be allowed on
          variable substitutions.














































     Licensed material--property of copyright holder(s)        Page 39



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026