csh(1) USER COMMANDS csh(1)
NAME
csh - shell command interpreter with a C-like syntax
SYNOPSIS
csh [ -bcefinstvVxX ] [ argument... ]
DESCRIPTION
csh, the C shell, is a command interpreter with a syntax
reminiscent of the C language. It provides a number of con-
venient features for interactive use that are not available
with the standard (Bourne) shell, including filename comple-
tion, command aliasing, history substitution, job control,
and a number of built-in commands. As with the standard
shell, the C shell provides variable, command and filename
substitution.
Initialization and Termination
When first started, the C shell normally performs commands
from the .cshrc file in your home directory, provided that
it is readable and you either own it or your real group ID
matches its group ID. If the shell is invoked with a name
that starts with `-', as when started by login(1), the shell
runs as a login shell. In this case, /etc/.login, if it
exists, is read first, then .cshrc, and finally .login in
your home directory; the same permission checks as those for
~/.cshrc are applied to ~/.login. Typically, the .login
files contain commands to specify the terminal type and
environment. As a login shell terminates, it performs com-
mands from the .logout file in your home directory; the same
permission checks as those for .cshrc are applied to this
file.
Interactive Operation
After startup processing is complete, an interactive C shell
begins reading commands from the terminal, prompting with
hostname% (or hostname# for the privileged user). The shell
then repeatedly performs the following actions: a line of
command input is read and broken into words. This sequence
of words is placed on the history list and then parsed, as
described under USAGE, below. Finally, the shell executes
each command in the current line.
Noninteractive Operation
When running noninteractively, the shell does not prompt for
input from the terminal. A noninteractive C shell can exe-
cute a command supplied as an argument on its command line,
or interpret commands from a script. The following options
are available:
-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
1
csh(1) USER COMMANDS csh(1)
script without confusion. The shell does not run a
set-user-ID script unless this option is present.
-c Read commands from the first filename argument (which
must be present). Remaining arguments are placed in
argv, the argument-list variable.
-e Exit if a command terminates abnormally or yields a
nonzero exit status.
-f Fast start. Read neither the .cshrc file, nor the
.login file (if a login shell) upon startup.
-i Forced interactive. Prompt for command-line input, even
if the standard input does not appear to be a terminal
(character-special device).
-n Parse (interpret), but do not execute commands. This
option can be used to check C shell scripts for syntax
errors.
-s Take commands from the standard input.
-t Read and execute a single command line. A `\'
(backslash) can be used to escape each newline for con-
tinuation of the command line onto subsequent input
lines.
-v Verbose. Set the verbose predefined variable; command
input is echoed after history substitution (but before
other substitutions) and before execution.
-V Set verbose before reading .cshrc.
-x Echo. Set the echo variable; echo commands after all
substitutions and just before execution.
-X Set echo before reading .cshrc. Except with the
options -c, -i, -s or -t, the first nonoption argument
is taken to be the name of a command or script. It is
passed as argument zero, and subsequent arguments are
added to the argument list for that command or script.
USAGE
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
2
csh(1) USER COMMANDS csh(1)
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 work-
ing 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, how-
ever, 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.
Lexical Structure
The shell splits input lines into words at space and tab
characters, except as noted below. The characters &, |, ;,
<, >, (, and ) form separate words; if paired, the pairs
form single words. These shell metacharacters can be made
part of other words, and their special meaning can be
suppressed by preceding them with a `\' (backslash). A new-
line preceded by a \ is equivalent to a space character. In
addition, a string enclosed in matched pairs of single-
quotes ('), double-quotes ("), or backquotes (`), forms a
partial word; metacharacters in such a string, including any
space or tab characters, do not form separate words. Within
pairs of backquote (`) or double-quote (") characters, a
newline preceded by a `\' (backslash) gives a true newline
character. Additional functions of each type of quote are
described, below, under Variable Substitution, Command Sub-
stitution, and Filename Substitution. When the shell's
input is not a terminal, the character # introduces a com-
ment that continues to the end of the input line. Its spe-
cial meaning is suppressed when preceded by a \ or enclosed
in matching quotes.
Command Line Parsing
A simple command is composed of a sequence of words. The
first word (that is not part of an I/O redirection) speci-
fies the command to be executed. A simple command, or a set
of simple commands separated by | or |& characters, forms a
pipeline. With |, the standard output of the preceding com-
mand is redirected to the standard input of the command that
follows. With |&, both the standard error and the standard
output are redirected through the pipeline. Pipelines can
be separated by semicolons (;), in which case they are exe-
cuted sequentially. Pipelines that are separated by && or ||
form conditional sequences in which the execution of pipe-
lines on the right depends upon the success or failure,
respectively, of the pipeline on the left. A pipeline or
sequence can be enclosed within parentheses `( )' to form a
simple command that can be a component in a pipeline or
sequence. A sequence of pipelines can be executed asynchro-
nously, or in the background by appending an `&'; rather
3
csh(1) USER COMMANDS csh(1)
than waiting for the sequence to finish before issuing a
prompt, the shell displays the job number (see Job Control,
below) and associated process IDs, and prompts immediately.
History Substitution
History substitution allows you to use words from previous
command lines in the command line you are typing. This sim-
plifies spelling corrections and the repetition of compli-
cated commands or arguments. Command lines are saved in the
history list, the size of which is controlled by the history
variable. The most recent command is retained in any case.
A history substitution begins with a ! (although you can
change this with the histchars variable) and may occur any-
where on the command line; history substitutions do not
nest. The ! can be escaped with \ to suppress its special
meaning. Input lines containing history substitutions are
echoed on the terminal after being expanded, but before any
other substitutions take place or the command gets executed.
Event Designators
An event designator is a reference to a command-line entry
in the history list.
! Start a history substitution, except when followed
by a space character, tab, newline, = or (.
!! Refer to the previous command. By itself, this
substitution repeats the previous command.
!n Refer to command-line n.
!-n Refer to the current command-line minus n.
!str Refer to the most recent command starting with
str.
!?str[?]
Refer to the most recent command containing str.
!{...}
Insulate a history reference from adjacent charac-
ters (if necessary).
Word Designators
A `:' (colon) separates the event specification from the
word designator. It can be omitted if the word designator
begins with a ^, $, *, - or %. If the word is to be
selected from the previous command, the second ! character
can be omitted from the event specification. For instance,
!!:1 and !:1 both refer to the first word of the previous
command, while !!$ and !$ both refer to the last word in the
previous command. Word designators include:
# The entire command line typed so far.
0 The first input word (command).
n The n'th argument.
^ The first argument, that is, 1.
$ The last argument.
% The word matched by (the most recent) ?s search.
4
csh(1) USER COMMANDS csh(1)
x-y A range of words; -y abbreviates 0-y.
* All the arguments, or a null value if there is
just one word in the event.
x* Abbreviates x-$.
x- Like x* but omitting word $.
Modifiers
After the optional word designator, you can add a sequence
of one or more of the following modifiers, each preceded by
a :.
h Remove a trailing pathname component, leaving the
head.
r Remove a trailing suffix of the form `.xxx', leav-
ing the basename.
e Remove all but the suffix.
s/l/r[/]
Substitute r for l.
t Remove all leading pathname components, leaving
the tail.
& Repeat the previous substitution.
g Apply the change to the first occurrence of a
match in each word, by prefixing the above (for
example, g&).
p Print the new command but do not execute it.
q Quote the substituted words, escaping further sub-
stitutions.
x Like q, but break into words at each space charac-
ter, tab or newline.
Unless preceded by a g, the modification is applied only to
the first string that matches l; an error results if no
string matches. The left-hand side of substitutions are not
regular expressions, but character strings. Any character
can be used as the delimiter in place of /. A backslash
quotes the delimiter character. The character &, in the
right hand side, is replaced by the text from the left-
hand-side. The & can be quoted with a backslash. A null l
uses the previous string either from a l or from a contex-
tual scan string s from !?s. You can omit the rightmost
delimiter if a newline immediately follows r; the rightmost
? in a context scan can similarly be omitted. Without an
event specification, a history reference refers either to
the previous command, or to a previous history reference on
the command line (if any).
Quick Substitution
^l^r[^]
This is equivalent to the history substitution:
!:s^l^r[^].
Aliases
The C shell maintains a list of aliases that you can create,
5
csh(1) USER COMMANDS csh(1)
display, and modify using the alias and unalias commands.
The shell checks the first word in each command to see if it
matches the name of an existing alias. If it does, the com-
mand is reprocessed with the alias definition replacing its
name; the history substitution mechanism is made available
as though that command were the previous input line. This
allows history substitutions, escaped with a backslash in
the definition, to be replaced with actual command-line
arguments when the alias is used. If no history substitu-
tion is called for, the arguments remain unchanged. Aliases
can be nested. That is, an alias definition can contain the
name of another alias. Nested aliases are expanded before
any history substitutions is applied. This is useful in
pipelines such as
alias lm 'ls -l \!* | more' which when called,
pipes the output of ls(1V) through more(1). Except for
the first word, the name of the alias may not appear in
its definition, nor in any alias referred to by its
definition. Such loops are detected, and cause an error
message.
I/O Redirection
The following metacharacters indicate that the subsequent
word is the name of a file to which the command's standard
input, standard output, or standard error is redirected;
this word is variable, command, and filename expanded
separately from the rest of the command.
< Redirect the standard input.
<<word Read the standard input, up to a line that is
identical with word, and place the resulting
lines in a temporary file. Unless word is
escaped or quoted, variable and command sub-
stitutions are performed on these lines.
Then, invoke the pipeline with the temporary
file as its standard input. word is not sub-
jected to variable, filename, or command sub-
stitution, and each line is compared to it
before any substitutions are performed by the
shell.
> >! >& >&!
Redirect the standard output to a file. If
the file does not exist, it is created. If
it does exist, it is overwritten; its previ-
ous contents are lost.
When set, the variable noclobber prevents
destruction of existing files. It also
prevents redirection to terminals and
6
csh(1) USER COMMANDS csh(1)
/dev/null, unless one of the ! forms is
used. The & forms redirect both standard
output and the the standard error (diagnostic
output) to the file.
>> >>& >>! >>&!
Append the standard output. Like >, but
places output at the end of the file rather
than overwriting it. If noclobber is set, it
is an error for the file not to exist, unless
one of the ! forms is used. The & forms
append both the standard error and standard
output to the file.
Variable Substitution
The C shell maintains a set of variables, each of which is
composed of a name and a value. A variable name consists of
up to 20 letters and digits, and starts with a letter (the
underscore is considered a letter). A variable's value is a
space-separated list of zero or more words. To refer to a
variable's value, precede its name with a `$'. Certain
references (described below) can be used to select specific
words from the value, or to display other information about
the variable. Braces can be used to insulate the reference
from other characters in an input-line word. Variable sub-
stitution takes place after the input line is analyzed,
aliases are resolved, and I/O redirections are applied.
Exceptions to this are variable references in I/O redirec-
tions (substituted at the time the redirection is made), and
backquoted strings (see Command Substitution). Variable
substitution can be suppressed by preceding the $ with a \,
except within double-quotes where it always occurs. Variable
substitution is suppressed inside of single-quotes. A $ is
escaped if followed by a space character, tab or newline.
Variables can be created, displayed, or destroyed using the
set and unset commands. Some variables are maintained or
used by the shell. For instance, the argv variable contains
an image of the shell's argument list. Of the variables
used by the shell, a number are toggles; the shell does not
care what their value is, only whether they are set or not.
Numerical values can be operated on as numbers (as with the
@ built-in). With numeric operations, an empty value is
considered to be zero; the second and subsequent words of
multiword values are ignored. For instance, when the ver-
bose variable is set to any value (including an empty
value), command input is echoed on the terminal. Command
and filename substitution is subsequently applied to the
words that result from the variable substitution, except
when suppressed by double-quotes, when noglob is set
(suppressing filename substitution), or when the reference
is quoted with the :q modifier. Within double-quotes, a
reference is expanded to form (a portion of) a quoted
7
csh(1) USER COMMANDS csh(1)
string; multiword values are expanded to a string with
embedded space characters. When the :q modifier is applied
to the reference, it is expanded to a list of space-
separated words, each of which is quoted to prevent subse-
quent command or filename substitutions. Except as noted
below, it is an error to refer to a variable that is not
set.
$var
${var} These are replaced by words from the value of
var, each separated by a space character. If
var is an environment variable, its value is
returned (but `:' modifiers and the other
forms given below are not available).
$var[index]
${var[index]} These select only the indicated words from
the value of var. Variable substitution is
applied to index, which may consist of (or
result in) a either single number, two
numbers separated by a `-', or an asterisk.
Words are indexed starting from 1; a `*'
selects all words. If the first number of a
range is omitted (as with $argv[-2]), it
defaults to 1. If the last number of a range
is omitted (as with $argv[1-]), it defaults
to $#var (the word count). It is not an
error for a range to be empty if the second
argument is omitted (or within range).
$#name
${#name} These give the number of words in the vari-
able.
$0 This substitutes the name of the file from
which command input is being read. An error
occurs if the name is not known.
$n
${n} Equivalent to $argv[n].
$* Equivalent to $argv[*]. The modifiers :e,
:h, :q, :r, :t and :x can be applied (see
History Substitution), as can :gh, :gt and
:gr. If
{} (braces) are used, then the modifiers
must appear within the braces. The current
implementation allows only one such modifier
per expansion. The following references may
not be modified with : modifiers.
$?var
8
csh(1) USER COMMANDS csh(1)
${?var} Substitutes the string 1 if var is set or 0
if it is not set.
$?0 Substitutes 1 if the current input filename
is known, or 0 if it is not.
$$ Substitute the process number of the (parent)
shell.
$< Substitutes a line from the standard input,
with no further interpretation thereafter.
It can be used to read from the keyboard in a
C shell script.
Command and Filename Substitutions
Command and filename substitutions are applied selectively
to the arguments of built-in commands. Portions of expres-
sions that are not evaluated are not expanded. For non-
built-in commands, filename expansion of the command name is
done separately from that of the argument list; expansion
occurs in a subshell, after I/O redirection is performed.
Command Substitution
A command enclosed by backquotes (`...`) is performed by a
subshell. Its standard output is broken into separate words
at each space character, tab and newline; null words are
discarded. This text replaces the backquoted string on the
current command line. Within double-quotes, only newline
characters force new words; space and tab characters are
preserved. However, a final newline is ignored. It is
therefore possible for a command substitution to yield a
partial word.
Filename Substitution
Unquoted words containing any of the characters *, ?, [ or
{, or that begin with ~, are expanded (also known as glob-
bing) to an alphabetically sorted list of filenames, as fol-
lows:
* Match any (zero or more) characters.
? Match any single character.
[ ... ] Match any single character in the enclosed
list(s) or range(s). A list is a string of
characters. A range is two characters
separated by a minus-sign (-), and includes
all the characters in between in the ASCII
collating sequence [see ascii(7)].
{ str, str, ... }
Expand to each string (or filename-matching
9
csh(1) USER COMMANDS csh(1)
pattern) in the comma-separated list. Unlike
the pattern-matching expressions above, the
expansion of this construct is not sorted.
For instance, {b,a} expands to `b' `a', (not
`a' `b'). As special cases, the characters {
and }, along with the string {}, are passed
undisturbed.
~[ user ] Your home directory, as indicated by
the value of the variable home, or that of
user, as indicated by the password entry for
user. Only the patterns *, ? and [...]
imply pattern matching; an error results if
no filename matches a pattern that contains
them. The `.' (dot character), when it is
the first character in a filename or pathname
component, must be matched explicitly. The /
(slash) must also be matched explicitly.
Expressions and Operators
A number of C shell built-in commands accept expressions, in
which the operators are similar to those of C and have the
same precedence. These expressions typically appear in the
@, exit, if, set and while commands, and are often used to
regulate the flow of control for executing commands. Com-
ponents of an expression are separated by white space. Null
or missing values are considered 0. The result of all
expressions are strings, which may represent decimal
numbers. The following C shell operators are grouped in
order of precedence:
(...) grouping
~ one's complement
! logical negation
* / % multiplication, division, remainder
(These are right associative, which
can lead to unexpected results.
Group combinations explicitly with
parentheses.)
+ - addition, subtraction (also right
associative)
<< >> 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 pattern match
(described below), filename-
substitution pattern mismatch
& bitwise AND
^ bitwise XOR (exclusive or)
10
csh(1) USER COMMANDS csh(1)
| bitwise inclusive OR
&& logical AND
|| logical OR
The operators: ==, !=, =~, and !~ compare their arguments
as strings; other operators use numbers. The operators =~
and !~ each check whether or not a string to the left
matches a filename substitution pattern on the right. This
reduces the need for switch statements when pattern-matching
between strings is all that is required. Also available are
file inquiries:
-r filename Return true, or 1 if the user has read
access. Otherwise it returns false, or 0.
-w filename True if the user has write access.
-x filename True if the user has execute permission
(or search permission on a directory).
-e filename True if file exists.
-o filename True if the user owns file.
-z filename True if file is of zero length (empty).
-f filename True if file is a plain file.
-d filename True if file is a directory.
If file does not exist or is inaccessible, then all
inquiries return false. An inquiry as to the success of a
command is also available:
{ command } If command runs successfully, the expres-
sion evaluates to true, 1. Otherwise it
evaluates to false 0. (Note that, con-
versely, command itself typically returns
0 when it runs successfully, or some other
value if it encounters a problem. If you
want to get at the status directly, use
the value of the status variable rather
than this expression).
Control Flow
The shell contains a number of commands to regulate the flow
of control in scripts, and within limits, from the terminal.
These commands operate by forcing the shell either to reread
input (to loop), or to skip input under certain conditions
(to branch). Each occurrence of a foreach, switch, while,
if...then and else built-in must appear as the first word on
its own input line. If the shell's input is not seekable
and a loop is being read, that input is buffered. The shell
performs seeks within the internal buffer to accomplish the
rereading implied by the loop. (To the extent that this
allows, backward goto commands will succeed on nonseekable
inputs.)
Command Execution
If the command is a C shell built-in, the shell executes it
directly. Otherwise, the shell searches for a file by that
name with execute access. If the command-name contains a /,
11
csh(1) USER COMMANDS csh(1)
the shell takes it as a pathname, and searches for it. If
the command-name does not contain a /, the shell attempts to
resolve it to a pathname, searching each directory in the
path variable for the command. To speed the search, the
shell uses its hash table (see the rehash built-in) to elim-
inate directories that have no applicable files. This hash-
ing can be disabled with the -c or -t, options, or the
unhash built-in. As a special case, if there is no / in the
name of the script and there is an alias for the word shell,
the expansion of the shell alias is prepended (without
modification), to the command line. The system attempts to
execute the first word of this special (late-occurring)
alias, which should be a full pathname. Remaining words of
the alias's definition, along with the text of the input
line, are treated as arguments. When a pathname is found
that has proper execute permissions, the shell forks a new
process and passes it, along with its arguments to the ker-
nel (using the execve(2) system call). The kernel then
attempts to overlay the new process with the desired pro-
gram. If the file is an executable binary (in a.out(4) for-
mat) the kernel succeeds, and begins executing the new pro-
cess. If the file is a text file, and the first line begins
with #!, the next word is taken to be the pathname of a
shell (or command) to interpret that script. Subsequent
words on the first line are taken as options for that shell.
The kernel invokes (overlays) the indicated shell, using the
name of the script as an argument. If neither of the above
conditions holds, the kernel cannot overlay the file (the
execve(2) call fails); the C shell then attempts to execute
the file by spawning a new shell, as follows:
⊕ If the first character of the file is a #, a C shell is
invoked.
⊕ Otherwise, a standard (Bourne) shell is invoked.
Signal Handling
The shell normally ignores QUIT signals. Background jobs
are immune to signals generated from the keyboard, including
hangups (HUP). Other signals have the values that the C
shell inherited from its environment. The shell's handling
of interrupt and terminate signals within scripts can be
controlled by the onintr built-in. Login shells catch the
TERM signal; otherwise this signal is passed on to child
processes. In no case are interrupts allowed when a login
shell is reading the .logout file.
Job Control
The shell associates a numbered job with each command
sequence, to keep track of those commands that are running
in the background or have been stopped with TSTP signals
(typically CTRL-z). When a command, or command sequence
12
csh(1) USER COMMANDS csh(1)
(semicolon separated list), is started in the background
using the & metacharacter, the shell displays a line with
the job number in brackets, and a list of associated process
numbers:
[1] 1234 To see the current list of jobs, use the jobs
built-in command. The job most recently stopped (or
put into the background if none are stopped) is
referred to as the current job, and is indicated with a
`+'. The previous job is indicated with a `-'; when
the current job is terminated or moved to the fore-
ground, this job takes its place (becomes the new
current job). To manipulate jobs, refer to the bg, fg,
kill, stop and % built-ins. A reference to a job
begins with a `%'. By itself, the percent-sign refers
to the current job.
% %+ %% The current job.
%- The previous job.
%j Refer to job j as in: `kill -9 %j'. j can
be a job number, or a string that uniquely
specifies the command-line by which it was
started; `fg %vi' might bring a stopped vi
job to the foreground, for instance.
%?string Specify the job for which the command-line
uniquely contains string. A job running in
the background stops when it attempts to read
from the terminal. Background jobs can nor-
mally produce output, but this can be
suppressed using the `stty tostop' command.
Status Reporting
While running interactively, the shell tracks the status of
each job and reports whenever a finishes or becomes blocked.
It normally displays a message to this effect as it issues a
prompt, so as to avoid disturbing the appearance of your
input. When set, the notify variable indicates that the
shell is to report status changes immediately. By default,
the notify command marks the current process; after starting
a background job, type notify to mark it.
Built-In Commands
Built-in commands are executed within the C shell. If a
built-in command occurs as any component of a pipeline
except the last, it is executed in a subshell.
: Null command. This command is interpreted, but
performs no action.
alias [ name [ def ] ]
Assign def to the alias name. def is a list of
words that may contain escaped history-
13
csh(1) USER COMMANDS csh(1)
substitution metasyntax. name is not allowed to
be alias or unalias. If def is omitted, the alias
name is displayed along with its current defini-
tion. If both name and def are omitted, all
aliases are displayed.
bg [%job] ...
Run the current or specified jobs in the back-
ground.
break Resume execution after the end of the nearest
enclosing foreach or while loop. The remaining
commands on the current line are executed. This
allows multilevel breaks to be written as a list
of break commands, all on one line.
breaksw Break from a switch, resuming after the endsw.
case label:
A label in a switch statement.
cd [ dir ]
chdir [ dir ]
Change the shell's working directory to directory
dir. If no argument is given, change to the home
directory of the user. If dir is a relative path-
name not found in the current directory, check for
it in those directories listed in the cdpath vari-
able. If dir is the name of a shell variable
whose value starts with a /, change to the direc-
tory named by that value.
continue Continue execution of the nearest enclosing while
or foreach.
default: Labels the default case in a switch statement.
The default should come after all case labels.
Any remaining commands on the command line are
first executed.
dirs [ -l ]
Print the directory stack, most recent to the
left; the first directory shown is the current
directory. With the -l argument, produce an unab-
breviated printout; use of the ~ notation is
suppressed.
echo [ -n ] list
The words in list are written to the shell's stan-
dard output, separated by space characters. The
output is terminated with a newline unless the -n
option is used.
14
csh(1) USER COMMANDS csh(1)
eval argument ...
Reads the arguments as input to the shell, and
executes the resulting command(s). This is usu-
ally used to execute commands generated as the
result of command or variable substitution, since
parsing occurs before these substitutions. See
tset(1) for an example of how to use eval.
exec command
Execute command in place of the current shell,
which terminates.
exit [ (expr) ]
The shell exits, either with the value of the
STATUS variable, or with the value of the speci-
fied by the expression expr.
fg % [ job ]
Bring the current or specified job into the fore-
ground.
foreach var (wordlist)
...
end The variable var is successively set to each
member of wordlist. The sequence of commands
between this command and the matching end is exe-
cuted for each new value of var. (Both foreach
and end must appear alone on separate lines.)
The built-in command continue may be used to con-
tinue the loop prematurely and the built-in com-
mand break to terminate it prematurely. When this
command is read from the terminal, the loop is
read up once prompting with ? before any state-
ments in the loop are executed.
glob wordlist
Perform filename expansion on wordlist. Like
echo, but no \ escapes are recognized. Words are
delimited by NULL characters in the output.
goto label
The specified label is filename and command
expanded to yield a label. The shell rewinds its
input as much as possible and searches for a line
of the form label: possibly preceded by space or
tab characters. Execution continues after the
indicated line. It is an error to jump to a label
that occurs between a while or for built-in, and
its corresponding end.
hashstat Print a statistics line indicating how effective
15
csh(1) USER COMMANDS csh(1)
the internal hash table has been at locating com-
mands (and avoiding execs). An exec 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 [ -hr ] [ n ]
Display the history list; if n is given, display
only the n most recent events.
-r Reverse the order of printout to be most
recent first rather than oldest first.
-h Display the history list without leading
numbers. This is used to produce files suit-
able for sourcing using the -h option to
source.
if (expr) command
If the specified expression evaluates to true, the
single command with arguments is executed. Vari-
able substitution on command happens early, at the
same time it does for the rest of the if command.
command must be a simple command, not a pipeline,
a command list, or a parenthesized command list.
Note: I/O redirection occurs even if expr is
false, when command is not executed (this is a
bug).
if (expr) then
...
else if (expr2) then
...
else
...
endif If expr"" is true, commands up to the first else
are executed. Otherwise, if expr2 is true, the
commands between the else if and the second else
are executed. Otherwise, commands between the
else and the endif are executed. Any number of
else if pairs are allowed, but only one else.
Only one endif is needed, but it is required. The
words else and endif must be the first nonwhite
characters on a line. The if must appear alone on
its input line or after an else.)
jobs[ -l ]
List the active jobs under job control.
-l List process IDs, in addition to the normal
information.
16
csh(1) USER COMMANDS csh(1)
kill [ -sig ] [ pid ] [ %job ] ...
kill -l Send the TERM (terminate) signal, by default, or
the signal specified, to the specified process ID,
the job indicated, or the current job. Signals
are either given by number or by name. There is
no default. Typing kill does not send a signal to
the current job. If the signal being sent is TERM
(terminate) or HUP (hangup), then the job or pro-
cess is sent a CONT (continue) signal as well.
-l List the signal names that can be sent.
limit [ -h ] [ resource [ max-use ] ]
Limit the consumption by the current process or
any process it spawns, each not to exceed max-use
on the specified resource. If max-use is omitted,
print the current limit; if resource is omitted,
display all limits.
-h Use hard limits instead of the current lim-
its. 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:
cputime Maximum CPU seconds per pro-
cess.
filesize Largest single file allowed.
datasize Maximum data size (including
stack) for the process.
stacksize Maximum stack size for the
process.
coredumpsize Maximum size of a core dump
(file).
max-use is a number, with an optional scaling fac-
tor, as follows:
nh Hours (for cputime).
nk n kilobytes. This is the
default for all but cputime.
nm n megabytes or minutes (for
cputime).
mm:ss Minutes and seconds (for cpu-
time).
login [ username|-p ]
Terminate a login shell and invoke login(1). The
.logout file is not processed. If username is
omitted, login prompts for the name of a user.
-p Preserve the current environment (variables).
17
csh(1) USER COMMANDS csh(1)
logout Terminate a login shell.
nice [ +n|-n ] [ command ]
Increment the process priority value for the shell
or for command by n. The higher the priority
value, the lower the priority of a process, and
the slower it runs. When given, command is always
run in a subshell, and the restrictions placed on
commands in simple if commands apply. If command
is omitted, nice increments the value for the
current shell. If no increment is specified, nice
sets the process priority value to 4. The range
of process priority values is from -20 to 20.
Values of n outside this range set the value to
the lower, or to the higher boundary, respec-
tively.
+n Increment the process priority value by
n.
-n Decrement by n. This argument can be
used only by the privileged user.
nohup [ command ]
Run command with HUPs ignored. With no arguments,
ignore HUPs throughout the remainder of a script.
When given, command is always run in a subshell,
and the restrictions placed on commands in simple
if commands apply. All processes detached with &
are effectively nohup'd.
notify [ %job ] ...
Notify the user asynchronously when the status of
the current, or of specified jobs, changes.
onintr [ - | label]
Control the action of the shell on interrupts.
With no arguments, onintr restores the default
action of the shell on interrupts. (The shell
terminates shell scripts and returns to the termi-
nal command input level). With the - argument,
the shell ignores all interrupts. With a label
argument, the shell executes a goto label when an
interrupt is received or a child process ter-
minates because it was interrupted.
popd [+n]
Pop the directory stack, and cd to the new top
directory. The elements of the directory stack
are numbered from 0 starting at the top.
+n Discard the n'th entry in the stack.
18
csh(1) USER COMMANDS csh(1)
pushd [+n | dir]
Push a directory onto the directory stack. With
no arguments, exchange the top two elements.
+n Rotate the n'th entry to the top of the stack
and cd to it.
dir Push the current working directory onto the
stack and change to dir.
rehash Recompute the internal hash table of the contents
of directories listed in the path variable to
account for new commands added.
repeat count command
Repeat command count times. command is subject to
the same restrictions as with the one-line if
statement.
set [var [ = value ] ]
set var[n] = word
With no arguments, set displays the values of all
shell variables. Multiword values are displayed
as a parenthesized list. With the var argument
alone, set assigns an empty (null) value to the
variable var. With arguments of the form var =
value set assigns value to var, where value is one
of:
word A single word (or quoted string).
(wordlist) A space-separated list of words
enclosed in parentheses.
Values are command and filename expanded before
being assigned. The form set var[n] = word
replaces the n'th word in a multiword value with
word.
setenv [ VAR [ word ] ]
With no arguments, setenv displays all environment
variables. With the VAR argument sets the
environment variable VAR to have an empty (null)
value. (By convention, environment variables are
normally given upper-case names.) With both VAR
and word arguments setenv sets the environment
variable NAME to the value word, which must be
either a single word or a quoted string. The most
commonly used environment variables, USER, TERM,
and PATH, are automatically imported to and
exported from the csh variables user, term, and
path; there is no need to use setenv for these.
In addition, the shell sets the PWD environment
variable from the csh variable cwd whenever the
latter changes.
19
csh(1) USER COMMANDS csh(1)
shift [ variable ]
The components of argv, or variable, if supplied,
are shifted to the left, discarding the first com-
ponent. It is an error for the variable not to be
set, or to have a null value.
source [ -h ] name
Reads commands from name. source commands may be
nested, but if they are nested too deeply the
shell may run out of file descriptors. An error
in a sourced file at any level terminates all
nested source commands.
-h Place commands from the the file name on
the history list without executing them.
stop [%job] ...
Stop the current or specified background job.
suspend Stop the shell in its tracks, much as if it had
been sent a stop signal with ^Z. This is most
often used to stop shells started by su.
switch (string)
case label:
...
breaksw
...
default:
...
breaksw
endsw Each label is successively matched, against the
specified string, which is first command and
filename expanded. The file metacharacters *, ?
and [...] may be used in the case labels, which
are variable expanded. If none of the labels
match before a default label is found, execution
begins after the default label. Each case state-
ment and the default statement must appear at the
beginning of a line. The command breaksw contin-
ues execution after the endsw. Otherwise control
falls through subsequent case and default state-
ments as with C. If no label matches and there is
no default, execution continues after the endsw.
time [ command ]
With no argument, print a summary of time used by
this C shell and its children. With an optional
command, execute command and print a summary of
the time it uses.
20
csh(1) USER COMMANDS csh(1)
umask [ value ]
Display the file creation mask. With value set
the file creation mask. value is given in octal,
and is XORed with the permissions of 666 for files
and 777 for directories to arrive at the permis-
sions for new files. Common values include 002,
giving complete access to the group, and read (and
directory search) access to others, or 022, giving
read (and directory search) but not write permis-
sion to the group and others.
unalias pattern
Discard aliases that match (filename substitution)
pattern. All aliases are removed by unalias *.
unhash Disable the internal hash table.
unlimit [ -h ] [ resource ]
Remove a limitation on resource. If no resource
is specified, then all resource limitations are
removed. See the description of the limit command
for the list of resource names.
-h Remove corresponding hard limits. Only
the privileged user may do this.
unset pattern
Remove variables whose names match (filename sub-
stitution) pattern. All variables are removed by
`unset *'; this has noticeably distasteful side-
effects.
unsetenv variable
Remove variable from the environment. Pattern
matching, as with unset is not performed.
wait Wait for background jobs to finish (or for an
interrupt) before prompting.
while (expr)
...
end While expr is true (evaluates to non-zero), repeat
commands between the while and the matching end
statement. break and continue may be used to ter-
minate or continue the loop prematurely. The
while and end must appear alone on their input
lines. If the shell's input is a terminal, it
prompts for commands with a question-mark until
the end command is entered and then performs the
commands in the loop.
21
csh(1) USER COMMANDS csh(1)
%[ job ] [ & ]
Bring the current or indicated job to the fore-
ground. With the ampersand, continue running job
in the background.
@ [ var =expr ]
@ [ var[n] =expr ]
With no arguments, display the values for all
shell variables. With arguments, the variable
var, or the n'th word in the value of var, to the
value that expr evaluates to. (If [n] is sup-
plied, both var and its n'th component must
already exist.)
If the expression contains the characters >, <, &
or |, then at least this part of expr must be
placed within parentheses.
The operators *=, +=, etc., are available as in C.
The space separating the name from the assignment
operator is optional. Spaces are, however, manda-
tory in separating components of expr that would
otherwise be single words.
Special postfix operators, ++ and -- increment or
decrement name, respectively.
Environment Variables and Predefined Shell Variables
Unlike the standard shell, the C shell maintains a distinc-
tion between environment variables, which are automatically
exported to processes it invokes, and shell variables, which
are not. Both types of variables are treated similarly
under variable substitution. The shell sets the variables
argv, cwd, home, path, prompt, shell, and status upon ini-
tialization. The shell copies the environment variable USER
into the shell variable user, TERM into term, and HOME into
home, and copies each back into the respective environment
variable whenever the shell variables are reset. PATH and
path are similarly handled. You need only set path once in
the .cshrc or .login file. The environment variable PWD is
set from cwd whenever the latter changes. The following
shell variables have predefined meanings:
argv Argument list. Contains the list of com-
mand line arguments supplied to the
current invocation of the shell. This
variable determines the value of the posi-
tional parameters $1, $2, and so on.
cdpath Contains a list of directories to be
searched by the cd, chdir, and popd com-
mands, if the directory argument each
22
csh(1) USER COMMANDS csh(1)
accepts is not a subdirectory of the
current directory.
cwd The full pathname of the current direc-
tory.
echo Echo commands (after substitutions), just
before execution.
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 CTRL-d) and the ESC
character have special significance when
typed in at the end of a terminal input
line:
EOT Print a list of all filenames that
start with the preceding string.
ESC Replace the preceding string with the
longest unambiguous extension.
hardpaths If set, pathnames in the directory stack
are resolved to contain no symbolic-link
components.
histchars A two-character string. The first charac-
ter replaces ! as the history-
substitution character. The second
replaces the carat (^) for quick substitu-
tions.
history The number of lines saved in the history
list. A very large number may use up all
of the C shell's memory. If not set, the
C shell saves only the most recent com-
mand.
home The user's home directory. The filename
expansion of ~ refers to the value of this
variable.
ignoreeof If set, the shell ignores EOF from termi-
nals. This protects against accidentally
killing a C shell by typing a CTRL-d.
mail A list of files where the C shell checks
for mail. If the first word of the value
is a number, it specifies a mail checking
interval in seconds (default 5 minutes).
23
csh(1) USER COMMANDS csh(1)
nobeep Suppress the bell during command comple-
tion when asking the C shell to extend an
ambiguous filename.
noclobber Restrict output redirection so that exist-
ing files are not destroyed by accident.
> redirections can only be made to new
files. >> redirections can only be made
to existing files.
noglob Inhibit filename substitution. This is
most useful in shell scripts once
filenames (if any) are obtained and no
further expansion is desired.
nonomatch Returns the filename substitution pattern,
rather than an error, if the pattern is
not matched. Malformed patterns still
result in errors.
notify If set, the shell notifies you immediately
as jobs are completed, rather than waiting
until just before issuing a prompt.
path The list of directories in which to search
for commands. path is initialized from
the environment variable PATH, which the C
shell updates whenever path changes. A
null word specifies the current directory.
The default is typically: (. /usr/ucb
/usr/bin). If path becomes unset only
full pathnames will execute. An interac-
tive C shell will normally hash the con-
tents of the directories listed after
reading .cshrc, and whenever path is
reset. If new commands are added, use the
rehash command to update the table.
prompt The string an interactive C shell prompts
with. Noninteractive shells leave the
prompt variable unset. Aliases and other
commands in the .cshrc file that are only
useful interactively, can be placed after
the following test: `if ($?prompt == 0)
exit', to reduce startup time for nonin-
teractive shells. A ! in the prompt
string is replaced by the current event
number. The default prompt is hostname%
for mere mortals, or hostname# for the
privileged user.
savehist The number of lines from the history list
24
csh(1) USER COMMANDS csh(1)
that are saved in ~/.history when the user
logs out. Large values for savehist slow
down the C shell during startup.
shell The file in which the C shell resides.
This is used in forking shells to inter-
pret files that have execute bits set, but
that are not executable by the system.
status The status returned by the most recent
command. If that command terminated
abnormally, 0200 is added to the status.
Built-in commands that fail return exit
status 1, all other built-in commands set
status to 0.
time Control automatic timing of commands. Can
be supplied with one or two values. The
first is the reporting threshold in CPU
seconds. The second is a string of tags
and text indicating which resources to
report on. A tag is a percent sign (%)
followed by a single upper-case letter
(unrecognized tags print as text):
%D Average amount of unshared
data space used in Kilobytes.
%E Elapsed (wallclock) time for
the command.
%F Page faults.
%I Number of block input opera-
tions.
%K Average amount of unshared
stack space used in Kilobytes.
%M Maximum real memory used dur-
ing execution of the process.
%O Number of block output opera-
tions.
%P Total CPU time - U (user) plus
S (system) - as a percentage
of E (elapsed) time.
%S Number of seconds of CPU time
consumed by the kernel on
behalf of the user's process.
%U Number of seconds of CPU time
devoted to the user's process.
%W Number of swaps.
%X Average amount of shared
memory used in Kilobytes.
The default summary display outputs from
the %U, %S, %E, %P, %X, %D, %I, %O, %F and
25
csh(1) USER COMMANDS csh(1)
%W tags, in that order.
verbose Display each command after history substi-
tution takes place.
FILES
~/.cshrc Read at beginning of execution by each
shell.
~/.login Read by login shells after .cshrc at
login.
~/.logout Read by login shells at logout.
~/.history Saved history for use at next login.
/usr/bin/sh Standard shell, for shell scripts not
starting with a `#'.
/tmp/sh* Temporary file for `<<'.
/etc/passwd Source of home directories for `~name'.
SEE ALSO
login(1), sh(1)
access(2), exec(2), fork(2), pipe(2) in the Programmer's
Reference Manual.
a.out(4), environ(4), termio(4), ascii(5) in the System
Administrator's Reference Manual.
DIAGNOSTICS
You have stopped jobs.
You attempted to exit the C shell with stopped jobs
under job control. An immediate second attempt to exit
will succeed, terminating the stopped jobs.
NOTES
Words can be no longer than 1024 characters. The system
limits argument lists to 1,048,576 characters. However, the
maximum number of arguments to a command for which filename
expansion applies is 1706. Command substitutions may expand
to no more characters than are allowed in the argument list.
To detect looping, the shell restricts the number of alias
substitutions on a single line to 20. When a command is
restarted from a stop, the shell prints the directory it
started in if this is different from the current directory;
this can be misleading (that is, wrong) as the job may have
changed directories internally. Shell built-in functions
are not stoppable/restartable. Command sequences of the
form a ; b ; c are also not handled gracefully when stopping
is attempted. If you suspend b, the shell never executes c.
This is especially noticeable if the expansion results from
an alias. It can be avoided by placing the sequence in
parentheses to force it into a subshell. Control over ter-
minal output after processes are started is primitive; use
the Sun Window system if you need better output control.
Multiline shell procedures should be provided, as they are
with the standard (Bourne) shell. Commands within loops,
26
csh(1) USER COMMANDS csh(1)
prompted for by ?, are not placed in the history list. Con-
trol structures should be parsed rather than being recog-
nized as built-in commands. This would allow control com-
mands to be placed anywhere, to be combined with |, and to
be used with & and ; metasyntax.
It should be possible to use the : modifiers on the output
of command substitutions. There are two problems with :
modifier usage on variable substitutions: not all of the
modifiers are available, and only one modifier per substitu-
tion is allowed. The g (global) flag in history substitu-
tions applies only to the first match in each word, rather
than all matches in all words. The the standard text editors
consistently do the latter when given the g flag in a sub-
stitution command. Quoting conventions are confusing.
Overriding the escape character to force variable substitu-
tions within double quotes is counterintuitive and incon-
sistent with the Bourne shell. Symbolic links can fool the
shell. Setting the hardpaths variable alleviates this. `set
path' should remove duplicate pathnames from the pathname
list. These often occur because a shell script or a .cshrc
file does something like `set
path=(/usr/local /usr/hosts $path)' to ensure that the
named directories are in the pathname list.
The only way to direct the standard output and standard
error separately is by invoking a subshell, as follows:
example% (command > outfile) >& errorfile Although
robust enough for general use, adventures into the eso-
teric periphery of the C shell may reveal unexpected
quirks.
27