svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
tcsh(1)
... is an enhanced but completely compatible version of the
Berkeley UNIX C shell, It is a command language interpreter us‐
able both as an interactive login shell and a shell script com‐
mand processor. It includes a command-line editor (see program‐
mable word completion (see spelling correction (see a history
mechanism (see job control (see and a C-like syntax. The section
describes major enhancements of over Throughout this manual, fea‐
tures of not found in most implementations (specifically, the
4.4BSD are labeled with and features which are present in but not
usually documented are labeled with If the first argument (argu‐
ment 0) to the shell is then it is a login shell. A login shell
can be also specified by invoking the shell with the flag as the
only argument. The rest of the flag arguments are interpreted as
follows: Forces a from option processing, causing any further
shell arguments to be treated as non-option arguments. The re‐
maining arguments will not be interpreted as shell options. This
may be used to pass options to a shell script without confusion
or possible subterfuge. The shell will not run a set-user ID
script without this option. Commands are read from the following
argument (which must be present, and must be a single argument),
stored in the shell variable for reference, and executed. Any
remaining arguments are placed in the shell variable. The shell
loads the directory stack from as described under whether or not
it is a login shell. (+) Sets the environment variable to (Do‐
main/OS only) (+) The shell exits if any invoked command termi‐
nates abnormally or yields a non-zero exit status. The shell
does not load any resource or startup files, or perform any com‐
mand hashing, and thus starts faster. The shell uses instead of
to spawn processes. (+) The shell is interactive and prompts for
its top-level input, even if it appears to not be a terminal.
Shells are interactive without this option if their inputs and
outputs are terminals. The shell is a login shell. Applicable
only if is the only flag specified. The shell loads even if it
does not belong to the effective user. Newer versions of can
pass to the shell. (+) The shell parses commands but does not ex‐
ecute them. This aids in debugging shell scripts. The shell ac‐
cepts SIGQUIT (see and behaves when it is used under a debugger.
Job control is disabled. (u) Command input is taken from the
standard input. The shell reads and executes a single line of
input. A may be used to escape the newline at the end of this
line and continue onto another line. Sets the shell variable, so
that command input is echoed after history substitution. Sets
the shell variable, so that commands are echoed immediately be‐
fore execution. Sets the shell variable even before executing Is
to as is to Print a help message on the standard output and exit.
(+) Print the version/platform/compilation options on the stan‐
dard output and exit. This information is also contained in the
shell variable. (+) After processing of flag arguments, if argu‐
ments remain but none of the or options were given, the first ar‐
gument is taken as the name of a file of commands, or to be exe‐
cuted. The shell opens this file and saves its name for possible
resubstitution by Because many systems use either the standard
version 6 or version 7 shells whose shell scripts are not compat‐
ible with this shell, the shell uses such a shell to execute a
script whose first character is not a i.e., that does not start
with a comment. Remaining arguments are placed in the shell
variable. A login shell begins by executing commands from the
system files and It then executes commands from files in the
user's directory: first or, if is not found, then the contents of
(or the value of the shell variable) are loaded into memory, then
and finally (or the value of the shell variable) (+). The shell
may read before instead of after and before instead of after or
and if so compiled; see the shell variable. (+) Non-login shells
read only and or on startup. For examples of startup files,
please consult: Commands like and which need be run only once per
login, usually go in one's file. Users who need to use the same
set of files with both and can have only a which checks for the
existence of the shell variable before using -specific commands,
or can have both a and a which s (see the builtin command) The
rest of this manual uses to mean or, if is not found, In the nor‐
mal case, the shell begins reading commands from the terminal,
prompting with (Processing of arguments and the use of the shell
to process files containing command scripts are described later.)
The shell repeatedly reads a line of command input, breaks it
into words, places it on the command history list, parses it and
executes each command in the line. One can log out by typing on
an empty line, or or via the shell's autologout mechanism (see
the shell variable). When a login shell terminates it sets the
shell variable to or as appropriate, then executes commands from
the files and The shell may drop DTR on logout if so compiled;
see the shell variable. The names of the system login and logout
files vary from system to system for compatibility with different
variants; see We first describe The and sections describe two
sets of functionality that are implemented as editor commands but
which deserve their own treatment. Finally, lists and describes
the editor commands specific to the shell and their default bind‐
ings. Command-line input can be edited using key sequences much
like those used in or The editor is active only when the shell
variable is set, which it is by default in interactive shells.
The builtin can display and change key bindings to editor com‐
mands (see -style key bindings are used by default (unless the
shell was compiled otherwise; see the shell variable), but can
change the key bindings to -style bindings en masse. The shell
always binds the arrow keys (as defined in the environment vari‐
able) to editor commands: unless doing so would alter another
single-character binding. One can set the arrow key escape se‐
quences to the empty string with to prevent these bindings. The
ANSI/VT100 sequences for arrow keys are always bound. Other key
bindings are, for the most part, what and users would expect and
can easily be displayed by so there is no need to list them here.
Likewise, can list the editor commands with a short description
of each. Certain key bindings have different behavior depending
if or -style bindings are being used; see for more information.
Note that editor commands do not have the same notion of a as
does the shell. The editor delimits words with any non-alphanu‐
meric characters not in the shell variable while the shell recog‐
nizes only whitespace and some of the characters with special
meanings to it, listed under The shell is often able to complete
words when given a unique abbreviation. For example, typing part
of a word and hit the tab key to run the editor command. The
shell completes the filename to replacing the incomplete word
with the complete word in the input buffer. (Note the terminal
completion adds a to the end of completed directories and a space
to the end of other completed words, to speed typing and provide
a visual indicator of successful completion. The shell variable
can be unset to prevent this.) If no match is found (perhaps
doesn't exist), the terminal bell rings. If the word is already
complete (perhaps there is a on your system, or perhaps you were
thinking too far ahead and typed the whole thing) a or space is
added to the end if it isn't already there. Completion works
anywhere in the line, not at just the end; completed text pushes
the rest of the line to the right. Completion in the middle of a
word often results in leftover characters to the right of the
cursor that need to be deleted. Commands and variables can be
completed in much the same way. For example, typing would com‐
plete to if were the only command on your system beginning with
Completion can find a command in any directory in or if given a
full pathname. Typing would complete to if no other variable be‐
gan with The shell parses the input buffer to determine whether
the word you want to complete should be completed as a filename,
command or variable. The first word in the buffer and the first
word following or is considered to be a command. A word begin‐
ning with is considered to be a variable. Anything else is a
filename. An empty line is as a filename. You can list the pos‐
sible completions of a word at any time by typing to run the edi‐
tor command. The shell lists the possible completions using the
builtin and reprints the prompt and unfinished command line, for
example: > ls /usr/l[^D] lbin/ lib/ local/
lost+found/ > ls /usr/l If the shell variable is set, the shell
lists the remaining choices (if any) whenever completion fails: >
set autolist > nm /usr/lib/libt[tab] libtermcap.a@ libtermlib.a@
> nm /usr/lib/libterm If the shell variable is set to choices are
listed only when completion fails and adds no new characters to
the word being completed. A filename to be completed can contain
variables, your own or others' home directories abbreviated with
(see and directory stack entries abbreviated with (see For exam‐
ple, > ls ~k[^D] kahn kas kellogg > ls ~ke[tab] > ls ~kel‐
logg/ or > set local = /usr/local > ls $lo[tab] > ls $local/[^D]
bin/ etc/ lib/ man/ src/ > ls $local/ Note that variables can
also be expanded explicitly with the editor command. lists at
only the end of the line; in the middle of a line it deletes the
character under the cursor and on an empty line it logs one out
or, if the variable is set, does nothing. bound to the editor
command lists completion possibilities anywhere on a line, and
(or any one of the related editor commands that do or don't
delete, list and/or log out, listed under can be bound to with
the builtin command if so desired. The and editor commands (not
bound to any keys by default) can be used to cycle up and down
through the list of possible completions, replacing the current
word with the next or previous word in the list. The shell vari‐
able can be set to a list of suffixes to be ignored by comple‐
tion. Consider the following: > ls Makefile condiments.h~
main.o side.c README main.c meal
side.o condiments.h main.c~ > set fignore = (.o \~) > emacs
ma[^D] main.c main.c~ main.o > emacs ma[tab] > emacs main.c
and are ignored by completion (but not listing), because they end
in suffixes in Note that a was needed in front of to prevent it
from being expanded to as described under is ignored if only one
completion is possible. If the shell variable is set to comple‐
tion 1) ignores case and 2) considers periods, hyphens and under‐
scores and to be word separators and hyphens and underscores to
be equivalent. If you had the following files comp.lang.c
comp.lang.perl comp.std.c++ comp.lang.c++ comp.std.c and
typed it would be completed to and typing would list and Typing
would list and Typing in the following directory A_silly_file
a-hyphenated-file another_silly_file would list all three
files, because case is ignored and hyphens and underscores are
equivalent. Periods, however, are not equivalent to hyphens or
underscores. If the shell variable is set to completion ignores
case and differences between a hyphen and an underscore word sep‐
arator only when the user types a lowercase character or a hy‐
phen. Entering an uppercase character or an underscore will not
match the corresponding lowercase character or hyphen word sepa‐
rator. Typing in the directory of the previous example would
still list all three files, but typing would match only and typ‐
ing would match just and because the user explicitly used an up‐
percase or an underscore character. Completion and listing are
affected by several other shell variables: can be set to complete
on the shortest possible unique match, even if more typing might
result in a longer match: > ls fodder foo food foonly
> set recexact > rm fo[tab] just beeps, because could expand to
or but if we type another > rm foo[tab] > rm foo the completion
completes on even though and also match. can be set to run the
editor command before each completion attempt, can be set to
spelling-correct the word to be completed (see before each com‐
pletion attempt and can be set to complete commands automatically
after one hits return. can be set to make completion beep or not
beep in a variety of situations, and can be set to never beep at
all. can be set to a list of directories and/or patterns that
match directories to prevent the completion mechanism from ing
those directories. and can be set to limit the number of items
and rows (respectively) that are listed without asking first.
can be set to make the shell list only executables when listing
commands, but it is quite slow. Finally, the builtin command can
be used to tell the shell how to complete words other than file‐
names, commands and variables. Completion and listing do not
work on glob-patterns (see but the and editor commands perform
equivalent functions for glob-patterns. The shell can sometimes
correct the spelling of filenames, commands and variable names as
well as completing and listing them. Individual words can be
spelling-corrected with the editor command (usually bound to and
and the entire input buffer with (usually bound to The shell
variable can be set to to correct the command name or to correct
the entire line each time return is typed, and can be set to cor‐
rect the word to be completed before each completion attempt.
When spelling correction is invoked in any of these ways and the
shell thinks that any part of the command line is misspelled, it
prompts with the corrected line: > set correct = cmd > lz
/usr/bin CORRECT>ls /usr/bin (y|n|e|a)? One can answer or space
to execute the corrected line, to leave the uncorrected command
in the input buffer, to abort the command as if had been hit, and
anything else to execute the original line unchanged. Spelling
correction recognizes user-defined completions (see the builtin
command). If an input word in a position for which a completion
is defined resembles a word in the completion list, spelling cor‐
rection registers a misspelling and suggests the latter word as a
correction. However, if the input word does not match any of the
possible completions for that position, spelling correction does
not register a misspelling. Like completion, spelling correction
works anywhere in the line, pushing the rest of the line to the
right and possibly leaving extra characters to the right of the
cursor. lists key bindings and lists and briefly describes edi‐
tor commands. Only new or especially interesting editor commands
are described here. See and for descriptions of each editor's
key bindings. The character or characters to which each command
is bound by default is given in parentheses. means a control
character and a meta character, typed as (or on terminals without
a meta key. Case counts, but commands that are bound to letters
by default are bound to both lower- and uppercase letters for
convenience. Supported editor commands are: Move back a charac‐
ter. Cursor behavior modified by Cut from beginning of current
word to cursor - saved in cut buffer. Word boundary behavior
modified by Move to beginning of current word. Word boundary and
cursor behavior modified by Move to beginning of line. Cursor
behavior modified by Capitalize the characters from cursor to end
of current word. Word boundary behavior modified by Completes a
word as described under Like but steps up from the end of the
list. Replaces the current word with the first word in the list
of possible completions. May be repeated to step down through
the list. At the end of the list, beeps and reverts to the in‐
complete word. Like but ignores user-defined completions.
Copies the previous word in the current line into the input
buffer. See also Word boundary behavior modified by Expands the
current word to the most recent preceding one for which the cur‐
rent is a leading substring, wrapping around the history list
(once) if necessary. Repeating without any intervening typing
changes to the next previous word etc., skipping identical
matches much like does. Deletes the character under the cursor.
See also Cursor behavior modified by Does if there is a character
under the cursor or on an empty line. See also Cursor behavior
modified by Does if there is a character under the cursor or at
the end of the line. See also Does if there is a character under
the cursor, at the end of the line or on an empty line. See also
those three commands, each of which does only a single action,
and and each of which does a different two out of the three. Cut
from cursor to end of current word - save in cut buffer. Word
boundary behavior modified by Like but steps down, stopping at
the original input line. Lowercase the characters from cursor to
end of current word. Word boundary behavior modified by Signals
an end of file, causing the shell to exit unless the shell vari‐
able is set to prevent this. See also Move cursor to end of
line. Cursor behavior modified by Expands history substitutions
in the current word. See See also and the shell variable. Ex‐
pands the glob-pattern to the left of the cursor. See Like but
expands history substitutions in each word in the input buffer.
Expands the variable to the left of the cursor. See Move forward
one character. Cursor behavior modified by Move forward to end
of current word. Word boundary and cursor behavior modified by
Searches backwards through the history list for a command begin‐
ning with the current contents of the input buffer up to the cur‐
sor and copies it into the input buffer. The search string may
be a glob-pattern (see containing or and will proceed from the
appropriate point in the history list. Emacs mode only. See
also and Like but searches forward. Searches backward like
copies the first match into the input buffer with the cursor po‐
sitioned at the end of the pattern, and prompts with and the
first match. Additional characters may be typed to extend the
search, may be typed to continue searching with the same pattern,
wrapping around the history list if necessary, must be bound to a
single character for this to work) or one of the following spe‐
cial characters may be typed: Appends the rest of the word under
the cursor to the search pattern. Undoes the effect of the last
character typed and deletes a character from the search pattern
if appropriate. If the previous search was successful, aborts
the entire search. If not, goes back to the last successful
search. Ends the search, leaving the current line in the input
buffer. Any other character not bound to terminates the search,
leaving the current line in the input buffer, and is then inter‐
preted as normal input. In particular, a carriage return causes
the current line to be executed. See also and Word boundary be‐
havior modified by Like but searches forward. Word boundary be‐
havior modified by Inserts the last word of the previous input
line into the input buffer. See also Lists completion possibili‐
ties as described under See also and Like but ignores user-de‐
fined completions. Lists (via the builtin) matches to the glob-
pattern (see to the left of the cursor. Does or on an empty
line. See also Expands history substitutions in the current
line, like and inserts a space. is designed to be bound to the
space bar, but is not bound by default. Searches for the current
word in and, if it is found, replaces it with the full path to
the executable. Special characters are quoted. Aliases are ex‐
panded and quoted but commands within aliases are not. This com‐
mand is useful with commands that take commands as arguments,
e.g., and Expands the current word as described under the setting
of the shell variable. Toggles between input and overwrite
modes. Saves the current input line and looks for a stopped job
where the file name portion of its first word is found in the
shell variable. If is not set, then the file name portion of the
environment variable if unset) and the environment variable if
unset) will be used. If such a job is found, it is restarted as
if had been typed. This is used to toggle back and forth between
an editor and the shell easily. Some people bind this command to
so they can do this even more easily. Searches for documentation
on the current command, using the same notion of as the comple‐
tion routines, and prints it. There is no way to use a pager; is
designed for short help files. If the special alias is defined,
it is run with the command name as a sole argument. Else, docu‐
mentation should be in a file named or which should be in one of
the directories listed in the environment variable. If there is
more than one help file only the first is printed. In insert
mode (the default), inserts the typed character into the input
line after the character under the cursor. In overwrite mode,
replaces the character under the cursor with the typed character.
The input mode is normally preserved between lines, but the shell
variable can be set to or to put the editor in that mode at the
beginning of each line. See also Indicates that the following
characters are part of a multi-key sequence. Binding a command
to a multi-key sequence really creates two bindings: the first
character to and the whole sequence to the command. All se‐
quences beginning with a character bound to are effectively bound
to unless bound to another command. Attempts to correct the
spelling of each word in the input buffer, like but ignores words
whose first character is one of or or which contain or to avoid
problems with switches, substitutions and the like. See Attempts
to correct the spelling of the current word as described under
Checks each component of a word which appears to be a pathname.
Expands or unexpands history substitutions in the input buffer.
See also and the shell variable. Beeps. Copies the previous en‐
try in the history list into the input buffer. If is set, uses
the literal form of the entry. May be repeated to step up
through the history list, stopping at the top. Uppercase the
characters from cursor to end of current word. Word boundary be‐
havior modified by Vi goto the beginning of next word. Word
boundary and cursor behavior modified by Vi move to the end of
the current word. Word boundary behavior modified by Prompts
with for a search string (which may be a glob-pattern, as with
searches for it and copies it into the input buffer. The bell
rings if no match is found. Hitting return ends the search and
leaves the last match in the input buffer. Hitting escape ends
the search and executes the match. mode only. Like but searches
forward. Does a (see the description of the builtin command) on
the first word of the input buffer. When executed immediately
after a or another replaces the yanked string with the next pre‐
vious string from the killring. This also has the effect of ro‐
tating the killring, such that this string will be considered the
most recently killed by a later command. Repeating will cycle
through the killring any number of times. The shell splits input
lines into words at blanks and tabs. The special characters and
and the doubled characters and are always separate words, whether
or not they are surrounded by whitespace. When the shell's input
is not a terminal, the character is taken to begin a comment.
Each and the rest of the input line on which it appears is dis‐
carded before further parsing. A special character (including a
blank or tab) may be prevented from having its special meaning,
and possibly made part of another word, by preceding it with a
backslash or enclosing it in single double or backward quotes.
When not otherwise quoted a newline preceded by a is equivalent
to a blank, but inside quotes this sequence results in a newline.
Furthermore, all except can be prevented by enclosing the strings
(or parts of strings) in which they appear with single quotes or
by quoting the crucial character(s) (e.g., or for or respec‐
tively) with is no exception: quoting in any way any character of
a word for which an has been defined prevents substitution of the
alias. The usual way of quoting an alias is to precede it with a
backslash.) is prevented by backslashes but not by single
quotes. Strings quoted with double or backward quotes undergo
and but other substitutions are prevented. Text inside single or
double quotes becomes a single word (or part of one). Metachar‐
acters in these strings, including blanks and tabs, do not form
separate words. Only in one special case (see can a double-
quoted string yield parts of more than one word; single-quoted
strings never do. Backward quotes are special: they signal which
may result in more than one word. C-style escape sequences can
be used in single quoted strings by preceding the leading quote
with (+) See for a complete list of recognized escape sequences.
Quoting complex strings, particularly strings which themselves
contain quoting characters, can be confusing. Remember that
quotes need not be used as they are in human writing! It may be
easier to quote not an entire string, but only those parts of the
string which need quoting, using different types of quoting to do
so if appropriate. The shell variable can be set to make back‐
slashes always quote and (+). This may make complex quoting
tasks easier, but it can cause syntax errors in scripts. The
following escape sequences are always recognized inside a string
constructed using and optionally by the builtin command as con‐
trolled by the shell variable. Supported escape sequences are:
Bell. Backspace. The control character denoted by in If is a
backslash, it must be doubled. Escape. Form feed. Newline.
Carriage return. Horizontal tab. Vertical tab. Literal back‐
slash. Literal single quote. Literal double quote. The charac‐
ter corresponding to the octal number The character corresponding
to the hexadecimal number (1-2 hexadecimal digits). The charac‐
ter corresponding to the hexadecimal number (1-8 hexadecimal dig‐
its). The Unicode code point (1-4 hexadecimal digits). The Uni‐
code code point (1-8 hexadecimal digits). The implementations of
and in other shells may take a varying number of digits. It is
often safest to use leading zeros to provide the maximum expected
number of digits. We now describe the various transformations
the shell performs on the input in the order in which they occur.
We note in passing the data structures involved and the commands
and variables which affect them. Remember that substitutions can
be prevented by quoting as described under Each command, or input
from the terminal is saved in the history list. The previous
command is always saved, and the shell variable can be set to a
number to save that many commands. The shell variable can be set
to not save duplicate events or consecutive duplicate events.
Saved commands are numbered sequentially from 1 and stamped with
the time. It is not usually necessary to use event numbers, but
the current event number can be made part of the prompt by plac‐
ing an in the shell variable. By default history entries are
displayed by printing each parsed token separated by space; thus
the redirection operator will be displayed as The shell actually
saves history in expanded and literal (unexpanded) forms. If the
shell variable is set, commands that display and store history
use the literal form. The builtin command can print, store in a
file, restore and clear the history list at any time, and the and
shell variables can be set to store the history list automati‐
cally on logout and restore it on login. History substitutions
introduce words from the history list into the input stream, mak‐
ing it easy to repeat commands, repeat arguments of a previous
command in the current command, or fix spelling mistakes in the
previous command with little typing and a high degree of confi‐
dence. History substitutions begin with the character They may
begin anywhere in the input stream, but they do not nest. The
may be preceded by a to prevent its special meaning; for conve‐
nience, a is passed unchanged when it is followed by a blank,
tab, newline, or History substitutions also occur when an input
line begins with see The characters used to signal history sub‐
stitution and can be changed by setting the shell variable. Any
input line which contains a history substitution is printed be‐
fore it is executed. A history substitution may have an (see
which indicates the event from which words are to be taken, a
(see which selects particular words from the chosen event, and/or
a (see which manipulates the selected words. A history event
specification may be one of (with the history substitution char‐
acter shown): A number, referring to a particular event. An off‐
set, referring to the event before the current event. The cur‐
rent event. This should be used carefully in where there is no
check for recursion. allows 10 levels of recursion. (+) The pre‐
vious event, equivalent to The most recent event whose first word
begins with the string The most recent event which contains the
string The second can be omitted if it is immediately followed by
a newline. For example, consider this bit of someone's history
list:
9 8:30 nroff -man wumpus.man 10 8:31 cp wumpus.man wum‐
pus.man.old 11 8:36 vi wumpus.man 12 8:37 diff wum‐
pus.man.old wumpus.man The commands are shown with their event
numbers and time stamps. The current event, which we haven't
typed in yet, is event 13. Typing or refers to event 11. Typing
refers to the previous event, 12. can be abbreviated if it is
followed by which is described in and Typing refers to event 9,
which begins with Typing refers to event 12, which contains With‐
out word designators or modifiers history references simply ex‐
pand to the entire event, so we might type to redo the command
(event 10) or if the output in the previous event, 12, scrolled
off the top of the screen. History references may be insulated
from the surrounding text with braces and if necessary. For ex‐
ample, would look for a command beginning with and, in this exam‐
ple, not find one, but would expand unambiguously to by matching
event 11. Even in braces, history substitutions do not nest.
(+) While expands, for example, to event 3 with the letter ap‐
pended to it, expands it to the last event beginning with only
completely numeric arguments are treated as event numbers. This
makes it possible to recall events beginning with numbers. To
expand as in type To select words from an event we can follow the
event specification by a and a designator for the desired words.
The words of an input line are numbered from 0, the first (usu‐
ally command) word being 0, the second word (first argument) be‐
ing 1, etc. The basic word designators are, with columns for a
leading and a leading (for the abbreviated word designators - see
The first (command) word. The th argument. The first argument,
equivalent to The last argument. The word matched by an search.
A range of words. Equivalent to Equivalent to but returns noth‐
ing if the event contains only 1 word. Equivalent to Equivalent
to but omitting the last word Equivalent to the command and all
arguments except the last argument. Selected words are inserted
into the command line separated by single blanks. For example,
the command (event 12) in the history list example in might have
been typed as (using to select the first argument from the previ‐
ous event) or to select and swap the arguments from the command
(event 10). If we didn't care about the order of the we might
have typed or simply The command (event 10) might have been typed
using to refer to the current event. Typing would reuse the
first two words from the command (event 9) to expand to The sepa‐
rating the event specification from the word designator can be
omitted if the argument selector begins with a or For example,
our command (event 12) might have been typed or, equivalently,
However, if is abbreviated an argument selector beginning with
will be interpreted as an event specification. A history refer‐
ence may have a word designator but no event specification. It
then references the previous command. Continuing our command ex‐
ample (event 12), we could have typed simply or, to get the argu‐
ments in the opposite order, just The word or words in a history
reference can be edited, or by following it with one or more mod‐
ifiers (with the leading shown), each preceded by a Remove a
trailing pathname component, leaving the head. Remove all lead‐
ing pathname components, leaving the tail. Remove a filename ex‐
tension leaving the root name. Remove all but the extension.
Uppercase the first lowercase letter. Lowercase the first upper‐
case letter. Substitute for is simply a string like not a regu‐
lar expression as in the eponymous command. Any character may be
used as the delimiter in place of a can be used to quote the de‐
limiter inside and The character in the is replaced by also
quotes If is empty the from a previous substitution or the from a
previous search or event number in event specification is used.
The trailing delimiter may be omitted if it is immediately fol‐
lowed by a newline. Repeat the previous substitution. Apply the
following modifier once to each word. Apply the following modi‐
fier as many times as possible to a single word. and can be used
together to apply a modifier globally. With the modifier, only
the patterns contained in the original word are substituted, not
patterns that contain any substitution result. Print the new
command line but do not execute it. Quote the substituted words,
preventing further substitutions. Same as but in addition pre‐
serve empty variables as a string containing a NUL. This is use‐
ful to preserve positional arguments for example: > set
args=('arg 1' '' 'arg 3') > tcsh -f -c 'echo ${#argv}' $args:gQ 3
Like but break into words at blanks, tabs and newlines. Modi‐
fiers are applied to only the first modifiable word (unless is
used). It is an error for no word to be modifiable. For exam‐
ple, the command (event 12) in the history list example in might
have been typed as using to remove from the first argument on the
same line We could type then to capitalize to upper case the
first word to or to upper case all words. We might follow with
to correct the spelling of (see and for different approaches).
(+) In as such, only one modifier may be applied to each history
or variable expansion. In more than one may be used, for example
% mv wumpus.man /usr/share/man/man1/wumpus.1 % man !$:t:r man
wumpus In the result would be A substitution followed by a may
need to be insulated from it with braces: > mv a.out
/usr/games/wumpus > setenv PATH !$:h:$PATH Bad ! modifier: $. >
setenv PATH !{-2$:h}:$PATH setenv PATH /usr/games:/bin:/usr/bin:.
The first attempt would succeed in but fails in because expects
another modifier after the second rather than There is a special
abbreviation for substitutions; when it is the first character on
an input line, is equivalent to Thus, we might follow the example
from with to make the spelling correction. This is the only his‐
tory substitution which does not explicitly begin with Finally,
history can be accessed through the editor as well as through the
substitutions just described. The and and and and and editor
commands search for events in the history list and copy them into
the input buffer. The editor command switches between the ex‐
panded and literal forms of history lines in the input buffer.
and expand history substitutions in the current word and in the
entire input buffer respectively. The shell maintains a list of
aliases which can be set, unset and printed by the and commands.
After a command line is parsed into simple commands (see the
first word of each command, left-to-right, is checked to see if
it has an alias. If so, the first word is replaced by the alias.
If the alias contains a history reference, it undergoes as though
the original command were the previous input line. If the alias
does not contain a history reference, the argument list is left
untouched. Thus if the alias for were the command would become
the argument list here being undisturbed. If the alias for were
then would become Aliases can be used to introduce parser meta‐
syntax. For example, defines a which its arguments to the line
printer. Alias substitution is repeated until the first word of
the command has no alias. If an alias substitution does not
change the first word (as in the previous example) it is flagged
to prevent a loop. Other loops are detected and cause an error.
Some aliases are referred to by the shell; see The shell main‐
tains a list of variables, each of which has as value a list of
zero or more words. The values of shell variables can be dis‐
played and changed with the and commands. The system maintains
its own list of variables. These can be displayed and changed
with and (+) Variables may be made read-only with Read-only vari‐
ables may not be modified or unset; attempting to do so will
cause an error. Once made read-only, a variable cannot be made
writable, so should be used with caution. Environment variables
cannot be made read-only. Some variables are set by the shell or
referred to by it. For instance, the variable is an image of the
shell's argument list, and words of this variable's value are re‐
ferred to in special ways. Some of the variables referred to by
the shell are toggles; the shell does not care what their value
is, only whether they are set or not. For instance, the variable
is a toggle which causes command input to be echoed. The command
line option sets this variable. lists all variables which are
referred to by the shell. Other operations treat variables nu‐
merically. The command permits numeric calculations to be per‐
formed and the result assigned to a variable. Variable values
are, however, always represented as (zero or more) strings. For
the purposes of numeric operations, the null string is considered
to be zero, and the second and subsequent words of multi-word
values are ignored. After the input line is aliased and parsed,
and before each command is executed, variable substitution is
performed keyed by characters. This expansion can be prevented
by preceding the with a except within pairs where it occurs, and
within pairs where it occurs. Strings quoted by are interpreted
later (see so substitution does not occur there until later, if
at all. A is passed unchanged if followed by a blank, tab, or
end-of-line. Input/output redirections are recognized before
variable expansion, and are variable expanded separately. Other‐
wise, the command name and entire argument list are expanded to‐
gether. It is thus possible for the first (command) word (to
this point) to generate more than one word, the first of which
becomes the command name, and the rest of which become arguments.
Unless enclosed in or given the modifier the results of variable
substitution may eventually be command and filename substituted.
Within a variable whose value consists of multiple words expands
to a (portion of a) single word, with the words of the variable's
value separated by blanks. When the modifier is applied to a
substitution the variable will expand to multiple words with each
word separated by a blank and quoted to prevent later command or
filename substitution. The editor command normally bound to can
be used to interactively expand individual variables. The fol‐
lowing metasequences are provided for introducing variable values
into the shell input: Substitutes the words of the value of vari‐
able each separated by a blank. Braces insulate from following
characters which would otherwise be part of it. Shell variables
have names consisting of letters and digits starting with a let‐
ter. The underscore character is considered a letter. If is not
a shell variable, but is set in the environment, then that value
is returned (but some of the other forms given below are not
available in this case). Substitutes only the selected words
from the value of The is subjected to substitution and may con‐
sist of a single number or two numbers separated by a The first
word of a variable's value is numbered If the first number of a
range is omitted it defaults to If the last member of a range is
omitted it defaults to The selects all words. It is not an error
for a range to be empty if the second argument is omitted or in
range. Substitutes the name of the file from which command input
is being read. An error occurs if the name is not known. Equiv‐
alent to Equivalent to which is equivalent to Except as noted, it
is an error to reference a variable which is not set. The modi‐
fiers described under except for can be applied to the substitu‐
tions above. More than one may be used. (+) Braces may be
needed to insulate a variable substitution from a literal just as
with any modifiers must appear within the braces. The following
substitutions cannot be modified with modifiers: Substitutes the
string if is set, if it is not. Substitutes if the current input
filename is known, if it is not. Always in interactive shells.
Substitutes the number of words in Equivalent to (+) Substitutes
the number of characters in (+) Substitutes the number of charac‐
ters in (+) Equivalent to (+) Substitutes the (decimal) process
number of the (parent) shell. Substitutes the (decimal) process
number of the last background process started by this shell. (+)
Substitutes the command line of the last command executed. (+)
Substitutes a line from the standard input, with no further in‐
terpretation thereafter. It can be used to read from the key‐
board in a shell script. (+) While always quotes as if it were
equivalent to does not. Furthermore, when is waiting for a line
to be typed the user may type an interrupt to interrupt the se‐
quence into which the line is to be substituted, but does not al‐
low this. Substitutes the number of available bytes from the
standard input. (This feature might be non-portable.) (+) The
remaining substitutions are applied selectively to the arguments
of builtin commands. This means that portions of expressions
which are not evaluated are not subjected to these expansions.
For commands which are not internal to the shell, the command
name is substituted separately from the argument list. This oc‐
curs very late, after input-output redirection is performed, and
in a child of the main shell. Command substitution is indicated
by a command enclosed in The output from such a command is broken
into separate words at blanks, tabs and newlines, and null words
are discarded. The output is variable and command substituted
and put in place of the original string. Command substitutions
inside double quotes retain blanks and tabs; only newlines force
new words. The single final newline does not force a new word in
any case. It is thus possible for a command substitution to
yield only part of a word, even if the command outputs a complete
line. By default, the shell since version 6.12 replaces all new‐
line and carriage return characters in the command by spaces. If
this is switched off by unsetting newlines separate commands as
usual. If a word contains any of the characters or or begins
with the character it is a candidate for filename substitution,
also known as This word is then regarded as a pattern and re‐
placed with an alphabetically sorted list of file names which
match the pattern. In matching filenames, the character at the
beginning of a filename or immediately following a as well as the
character must be matched explicitly (unless either or or both
are set (+)). The character matches any string of characters,
including the null string. The character matches any single
character. The sequence matches any one of the characters en‐
closed. Within a pair of characters separated by matches any
character lexically between the two. (+) Some glob-patterns can
be negated: The sequence matches any single character specified
by the characters and/or ranges of characters in the braces. An
entire glob-pattern can also be negated with > echo * bang crash
crunch ouch > echo ^cr* bang ouch Glob-patterns which do not use
or or which use or (below) are not negated correctly. The metan‐
otation is a shorthand for Left-to-right order is preserved: ex‐
pands to The results of matches are sorted separately at a low
level to preserve this order: might expand to (Note that was not
sorted with the results of matching It is not an error when this
construct expands to files which do not exist, but it is possible
to get an error from a command to which the expanded list is
passed. This construct may be nested. As a special case the
words and are passed undisturbed. The character at the beginning
of a filename refers to home directories. Standing alone, i.e.,
it expands to the invoker's home directory as reflected in the
value of the shell variable. When followed by a name consisting
of letters, digits and characters the shell searches for a user
with that name and substitutes their home directory; thus might
expand to and might expand to If the character is followed by a
character other than a letter or or appears elsewhere than at the
beginning of a word, it is left undisturbed. A command like does
not, therefore, do home directory substitution as one might hope.
It is an error for a glob-pattern containing or with or without
not to match any files. However, only one pattern in a list of
glob-patterns must match a file (so that, e.g., would fail only
if there were no files in the current directory ending in or and
if the shell variable is set a pattern (or list of patterns)
which matches nothing is left unchanged rather than causing an
error. The shell variable can be set to allow or as a file glob
pattern that matches any string of characters including recur‐
sively traversing any existing sub-directories. For example,
will list all the .c files in the current directory tree. If
used by itself, it will match zero or more sub-directories. For
example will list any file named in the directory tree; will
match any file in the directory tree ending in and will match any
.h file with either in a subdirectory name or in the filename it‐
self. To prevent problems with recursion, the glob-pattern will
not descend into a symbolic link containing a directory. To
override this, use (+) The shell variable can be set to prevent
filename substitution, and the editor command, normally bound to
can be used to interactively expand individual filename substitu‐
tions. The directory stack is a list of directories, numbered
from zero, used by the and builtin commands. can print, store in
a file, restore and clear the directory stack at any time, and
the and shell variables can be set to store the directory stack
automatically on logout and restore it on login. The shell vari‐
able can be examined to see the directory stack and set to put
arbitrary directories into the directory stack. The character
followed by one or more digits expands to an entry in the direc‐
tory stack. The special case expands to the last directory in
the stack. For example, > dirs -v 0 /usr/bin 1
/usr/spool/uucp 2 /usr/accts/sys > echo =1 /usr/spool/uucp
> echo =0/calendar /usr/bin/calendar > echo =- /usr/accts/sys The
and shell variables and the editor command apply to directory
stack as well as filename substitutions. There are several more
transformations involving filenames, not strictly related to the
above but mentioned here for completeness. filename may be ex‐
panded to a full path when the variable is set to Quoting pre‐
vents this expansion, and the editor command does it on demand.
The editor command expands commands in into full paths on demand.
Finally, and interpret as the old working directory (equivalent
to the shell variable This is not a substitution at all, but an
abbreviation recognized by only those commands. Nonetheless, it
too can be prevented by quoting. The next three sections de‐
scribe how the shell executes commands and deals with their input
and output. A simple command is a sequence of words, the first
of which specifies the command to be executed. A series of sim‐
ple commands joined by characters forms a pipeline. The output
of each command in a pipeline is connected to the input of the
next. Simple commands and pipelines may be joined into sequences
with and will be executed sequentially. Commands and pipelines
can also be joined into sequences with or indicating, as in the C
language, that the second is to be executed only if the first
fails or succeeds respectively. A simple command, pipeline or
sequence may be placed in parentheses and to form a simple com‐
mand, which may in turn be a component of a pipeline or sequence.
A command, pipeline or sequence can be executed without waiting
for it to terminate by following it with an Builtin commands are
executed within the shell. If any component of a pipeline except
the last is a builtin command, the pipeline is executed in a sub‐
shell. Parenthesized commands are always executed in a subshell.
(cd; pwd); pwd thus prints the directory, leaving you where you
were (printing this after the home directory), while cd; pwd
leaves you in the directory. Parenthesized commands are most of‐
ten used to prevent from affecting the current shell. When a
command to be executed is found not to be a builtin command the
shell attempts to execute the command via Each word in the vari‐
able names a directory in which the shell will look for the com‐
mand. If the shell is not given a option, the shell hashes the
names in these directories into an internal table so that it will
try an in only a directory where there is a possibility that the
command resides there. This greatly speeds command location when
a large number of directories are present in the search path.
This hashing mechanism is not used: If hashing is turned explic‐
itly off via If the shell was given a For each directory compo‐
nent of which does not begin with a If the command contains a In
the above four cases the shell concatenates each component of the
path vector with the given command name to form a path name of a
file which it then attempts to execute it. If execution is suc‐
cessful, the search stops. If the file has execute permissions
but is not an executable to the system (i.e., it is neither an
executable binary nor a script that specifies its interpreter),
then it is assumed to be a file containing shell commands and a
new shell is spawned to read it. The special alias may be set to
specify an interpreter other than the shell itself. On systems
which do not understand the script interpreter convention the
shell may be compiled to emulate it; see the shell variable. If
so, the shell checks the first line of the file to see if it is
of the form If it is, the shell starts with the given s and feeds
the file to it on standard input. The standard input and stan‐
dard output of a command may be redirected with the following
syntax: Open file (which is first variable, command and filename
expanded) as the standard input. Read the shell input up to a
line which is identical to is not subjected to variable, filename
or command substitution, and each input line is compared to be‐
fore any substitutions are done on this input line. Unless a
quoting or appears in variable and command substitution is per‐
formed on the intervening lines, allowing to quote and Commands
which are substituted have all blanks, tabs, and newlines pre‐
served, except for the final newline which is dropped. The re‐
sultant text is placed in an anonymous temporary file which is
given to the command as standard input. The file is used as
standard output. If the file does not exist then it is created;
if the file exists, it is truncated, its previous contents being
lost. If the shell variable is set, then the file must not exist
or be a character special file (e.g., a terminal or or an error
results. This helps prevent accidental destruction of files. In
this case the forms can be used to suppress this check. If is
given in is allowed on empty files; if is given in an interactive
confirmation is presented, rather than an error. The forms in‐
volving route the diagnostic output into the specified file as
well as the standard output. is expanded in the same way as in‐
put filenames are. Like but appends output to the end of If the
shell variable is set, then it is an error for the file to exist,
unless one of the forms is given. A command receives the envi‐
ronment in which the shell was invoked as modified by the input-
output parameters and the presence of the command in a pipeline.
Thus, unlike some previous shells, commands run from a file of
shell commands have no access to the text of the commands by de‐
fault; rather they receive the original standard input of the
shell. The mechanism should be used to present inline data.
This permits shell command scripts to function as components of
pipelines and allows the shell to block read its input. Note
that the default standard input for a command run detached is the
empty file but the original standard input of the shell. If this
is a terminal and if the process attempts to read from the termi‐
nal, then the process will block and the user will be notified
(see Diagnostic output may be directed through a pipe with the
standard output. Simply use the form rather than just The shell
cannot presently redirect diagnostic output without also redi‐
recting standard output, but is often an acceptable workaround.
Either or may be to send output to the terminal. Having de‐
scribed how the shell accepts, parses and executes command lines,
we now turn to a variety of its useful features. The shell con‐
tains a number of commands which can be used to regulate the flow
of control in command files (shell scripts) and (in limited but
useful ways) from terminal input. These commands all operate by
forcing the shell to reread or skip in its input and, due to the
implementation, restrict the placement of some of the commands.
The and statements, as well as the form of the statement, require
that the major keywords appear in a single simple command on an
input line as shown below. If the shell's input is not seekable,
the shell buffers up input whenever a loop is being read and per‐
forms seeks in this internal buffer to accomplish the rereading
implied by the loop. (To the extent that this allows, backward s
will succeed on non-seekable inputs.) The and builtin commands
use expressions with a common syntax. The expressions can in‐
clude any of the operators described in the next three sections.
Note that the builtin command has its own separate syntax. These
operators are similar to those of C and have the same precedence.
The operators, in descending precedence, with equivalent prece‐
dence per line, are: The and operators compare their arguments as
strings; all others operate on numbers. The operators and are
like and except that the right hand side is a glob-pattern (see
against which the left hand operand is matched. This reduces the
need for use of the builtin command in shell scripts when all
that is really needed is pattern matching. Null or missing argu‐
ments are considered 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; ex‐
cept when adjacent to components of expressions which are syntac‐
tically significant to the parser they should be surrounded by
spaces. Commands can be executed in expressions and their exit
status returned by enclosing them in braces and Remember that the
braces should be separated from the words of the command by
spaces. Command executions succeed, returning true, i.e., if the
command exits with status 0, otherwise they fail, returning
false, i.e., If more detailed status information is required then
the command should be executed outside of an expression and the
shell variable examined. Some of these operators perform
true/false tests on files and related objects. They are of the
form where is one of: Read access. Write access. Execute ac‐
cess. Executable in the path or shell builtin, e.g., and are
generally true, but is not. (+) Existence. Ownership. Zero
size. Non-zero size. (+) Plain file. Directory. Symbolic link.
(+) * Block special file. (+) Character special file. (+) Named
pipe (fifo). (+) * Socket special file. (+) * Set-user-ID bit is
set. (+) Set-group-ID bit is set. (+) Sticky bit is set. (+)
(which must be a digit) is an open file descriptor for a terminal
device. (+) Has been migrated (Convex only). (+) Applies subse‐
quent operators in a multiple-operator test to a symbolic link
rather than to the file to which the link points. (+) * is com‐
mand and filename expanded and then tested to see if it has the
specified relationship to the real user. If does not exist or is
inaccessible or, for the operators indicated by if the specified
file type does not exist on the current system, then all in‐
quiries return false, i.e., These operators may be combined for
conciseness: is equivalent to (+) For example, is true (returns
for plain executable files, but not for directories. may be used
in a multiple-operator test to apply subsequent operators to a
symbolic link rather than to the file to which the link points.
For example, is true for links owned by the invoking user. and
are always true for links and false for non-links. has a differ‐
ent meaning when it is the last operator in a multiple-operator
test; see below. It is possible but not useful, and sometimes
misleading, to combine operators which expect to be a file with
operators which do not (e.g., and Following with a non-file oper‐
ator can lead to particularly strange results. Other operators
return other information, i.e., not just or (+) They have the
same format as before; may be one of: Last file access time, as
the number of seconds since the epoch. Like but in timestamp
format, e.g., Last file modification time. Like but in timestamp
format. Last inode modification time. Like but in timestamp
format. Device number. Inode number. Composite ile identifier,
in the form The name of the file pointed to by a symbolic link.
Number of (hard) links. Permissions, in octal, without leading
zero. Like with leading zero. Equivalent to For example, re‐
turns if is writable by group and other, if by group only, and if
by neither. Like with leading zero. Numeric userid. Username,
or the numeric userid if the username is unknown. Numeric
groupid. Groupname, or the numeric groupid if the groupname is
unknown. Size, in bytes. Only one of these operators may appear
in a multiple-operator test, and it must be the last. Note that
has a different meaning at the end of and elsewhere in a multi‐
ple-operator test. Because is a valid return value for many of
these operators, they do not return when they fail: most return
and returns If the shell is compiled with POSIX defined (see the
shell variable), the result of a file inquiry is based on the
permission bits of the file and not on the result of the system
call. For example, if one tests a file with whose permissions
would ordinarily allow writing but which is on a file system
mounted read-only, the test will succeed in a POSIX shell but
fail in a non-POSIX shell. File inquiry operators can also be
evaluated with the builtin command (+). The shell associates a
with each pipeline. It keeps a table of current jobs, printed by
the command, and assigns them small integer numbers. When a job
is started asynchronously with the shell prints a line which
looks like [1] 1234 indicating that the job which was started
asynchronously was job number 1 and had one (top-level) process,
whose process id was 1234. If you are running a job and wish to
do something else you may hit the suspend key (usually which
sends a STOP signal to the current job. The shell will then nor‐
mally indicate that the job has been and print another prompt.
If the shell variable is set, all jobs will be listed like the
builtin command; if it is set to the listing will be in long for‐
mat, like You can then manipulate the state of the suspended job.
You can put it in the with the command or run some other commands
and eventually bring the job back into the with (See also the ed‐
itor command.) A takes effect immediately and is like an inter‐
rupt in that pending output and unread input are discarded when
it is typed. The builtin command causes the shell to wait for
all background jobs to complete. The key sends a delayed suspend
signal, which does not generate a STOP signal until a program at‐
tempts to it, to the current job. This can usefully be typed
ahead when you have prepared some commands for a job which you
wish to stop after it has read them. The key performs this func‐
tion in in is an editing command. (+) A job being run in the
background stops if it tries to read from the terminal. Back‐
ground jobs are normally allowed to produce output, but this can
be disabled by giving the command If you set this tty option,
then background jobs will stop when they try to produce output
like they do when they try to read input. There are several ways
to refer to jobs in the shell. The character introduces a job
name. If you wish to refer to job number 1, you can name it as
Just naming a job brings it to the foreground; thus is a synonym
for bringing job 1 back into the foreground. Similarly, typing
resumes job 1 in the background, just like A job can also be
named by an unambiguous prefix of the string typed in to start
it: would normally restart a suspended job, if there were only
one suspended job whose name began with the string It is also
possible to type to specify a job whose text contains if there is
only one such job. The shell maintains a notion of the current
and previous jobs. In output pertaining to jobs, the current job
is marked with a and the previous job with a The abbreviations
and (by analogy with the syntax of the mechanism) all refer to
the current job, and refers to the previous job. The job control
mechanism requires that the option be set on some systems. It is
an artifact from a implementation of the tty driver which allows
generation of interrupt characters from the keyboard to tell jobs
to stop. See and the builtin command for details on setting op‐
tions in the new tty driver. The shell learns immediately when‐
ever a process changes state. It normally informs you whenever a
job becomes blocked so that no further progress is possible, but
only right before it prints a prompt. This is done so that it
does not otherwise disturb your work. If, however, you set the
shell variable the shell will notify you immediately of changes
of status in background jobs. There is also a builtin command
which marks a single process so that its status changes will be
immediately reported. By default marks the current process; sim‐
ply enter after starting a background job to mark it for immedi‐
ate status reporting. When you try to leave the shell while jobs
are stopped, you will be warned that You may use the command to
see what they are. If you do this or immediately try to exit
again, the shell will not warn you a second time, and the sus‐
pended jobs will be terminated. There are various ways to run
commands and take other actions automatically at various times in
the of the shell. They are summarized here, and described in de‐
tail under the appropriate and The builtin command puts commands
in a scheduled-event list, to be executed by the shell at a given
time. The and can be set, respectively, to execute commands:
when the shell wants to ring the bell, when the working directory
changes, when a job is started or is brought into the foreground,
every minutes, before each prompt, and before each command gets
executed. The shell variable can be set to log out or lock the
shell after a given number of minutes of inactivity. The shell
variable can be set to check for new mail periodically. The
shell variable can be set to print the exit status of commands
which exit with a status other than zero. The shell variable can
be set to ask the user, when is typed, if that is really what was
meant. The shell variable can be set to execute the builtin com‐
mand after the completion of any process that takes more than a
given number of CPU seconds. The and shell variables can be set
to report when selected users log in or out, and the builtin com‐
mand reports on those users at any time. The shell is eight bit
clean (if so compiled; see the shell variable) and thus supports
character sets needing this capability. NLS support differs de‐
pending on whether or not the shell was compiled to use the sys‐
tem's NLS (again, see In either case, 7-bit ASCII is the default
character code (e.g., the classification of which characters are
printable) and sorting, and changing the or environment variables
causes a check for possible changes in these respects. When us‐
ing the system's NLS, the function is called to determine appro‐
priate character code/classification and sorting (e.g., would
yield as the character code). This function typically examines
the and environment variables; refer to the system documentation
for further details. When not using the system's NLS, the shell
simulates it by assuming that the ISO 8859-1 character set is
used whenever either of the and variables are set, regardless of
their values. Sorting is not affected for the simulated NLS. In
addition, with both real and simulated NLS, all printable charac‐
ters in the range \200-\377, i.e., those that have bindings, are
automatically rebound to The corresponding binding for the se‐
quence, if any, is left alone. These characters are not rebound
if the environment variable is set. This may be useful for the
simulated NLS or a primitive real NLS which assumes full ISO
8859-1. Otherwise, all bindings in the range \240-\377 are ef‐
fectively undone. Explicitly rebinding the relevant keys with is
of course still possible. Unknown characters (i.e., those that
are neither printable nor control characters) are printed in the
format \nnn. If the tty is not in 8 bit mode, other 8 bit char‐
acters are printed by converting them to ASCII and using standout
mode. The shell never changes the 7/8 bit mode of the tty and
tracks user-initiated changes of 7/8 bit mode. NLS users (or,
for that matter, those who want to use a meta key) may need to
explicitly set the tty in 8 bit mode through the appropriate com‐
mand in, e.g., the file. A number of new builtin commands are
provided to support features in particular operating systems.
All are described in detail in the section. On systems that sup‐
port TCF (aix-ibm370, aix-ps2), and get and set the system execu‐
tion path, and get and set the experimental version prefix and
migrates processes between sites. The builtin prints the site on
which each job is executing. Under BS2000, executes commands of
the underlying BS2000/OSD operating system. Under Domain/OS,
adds shared libraries to the current environment, changes the
rootnode and changes the systype. Under Mach, is equivalent to
Mach's Under Masscomp/RTU and Harris CX/UX, sets the universe.
Under Harris CX/UX, or runs a command under the specified uni‐
verse. Under Convex/OS, prints or sets the universe. The and
environment variables indicate respectively the vendor, operating
system and machine type (microprocessor class or machine model)
of the system on which the shell thinks it is running. These are
particularly useful when sharing one's home directory between
several types of machines; one can, for example, set path =
(~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .) in one's and put exe‐
cutables compiled for each machine in the appropriate directory.
The shell variable indicates what options were chosen when the
shell was compiled. Note also the builtin, the and shell vari‐
ables and the system-dependent locations of the shell's input
files (see Login shells ignore interrupts when reading the file
The shell ignores quit signals unless started with Login shells
catch the terminate signal, but non-login shells inherit the ter‐
minate behavior from their parents. Other signals have the val‐
ues which the shell inherited from its parent. In shell scripts,
the shell's handling of interrupt and terminate signals can be
controlled with and its handling of hangups can be controlled
with and The shell exits on a hangup (see also the shell vari‐
able). By default, the shell's children do too, but the shell
does not send them a hangup when it exits. arranges for the
shell to send a hangup to a child when it exits, and sets a child
to ignore hangups. The shell uses three different sets of termi‐
nal modes: used when editing; used when quoting literal charac‐
ters; and used when executing commands. The shell holds some
settings in each mode constant, so commands which leave the tty
in a confused state do not interfere with the shell. The shell
also matches changes in the speed and padding of the tty. The
list of tty modes that are kept constant can be examined and mod‐
ified with the builtin. Note that although the editor uses
CBREAK mode (or its equivalent), it takes typed-ahead characters
anyway. The and commands can be used to manipulate and debug
terminal capabilities from the command line. On systems that
support SIGWINCH or SIGWINDOW, the shell adapts to window resiz‐
ing automatically and adjusts the environment variables and if
set. If the environment variable contains and fields, the shell
adjusts them to reflect the new window size. The next sections
of this manual describe all of the available and A synonym for
the builtin command. A synonym for the builtin command. Does
nothing, successfully. The first form prints the values of all
shell variables. The second form assigns the value of to The
third form assigns the value of to the 'th component of both and
its 'th component must already exist. may contain the operators
etc., as in C. If contains or then at least that part of must be
placed within and Note that the syntax of has nothing to do with
that described under The fourth and fifth forms increment or
decrement or its 'th component. The space between and is re‐
quired. The spaces between and and between and are optional.
Components of must be separated by spaces. Without arguments,
prints all aliases. With prints the alias for name. With and
assigns as the alias of is command and filename substituted. may
not be or See also the builtin command. Shows the amount of dy‐
namic memory acquired, broken down into used and free memory.
With an argument shows the number of free and used blocks in each
size category. The categories start at size 8 and double at each
step. This command's output may vary across system types, be‐
cause systems other than the VAX may use a different memory allo‐
cator. Puts the specified jobs (or, without arguments, the cur‐
rent job) into the background, continuing each if it is stopped.
may be a number, a string, or as described under The first form
either lists all bound keys and the editor command to which each
is bound, lists a description of the commands, or binds all keys
to a specific mode. The second form lists the editor command to
which is bound. The third form binds the editor command to Sup‐
ported options: Lists or changes key-bindings in the alternative
key map. This is the key map used in command mode. is inter‐
preted as a control character written (e.g., or (e.g., a meta
character written (e.g., a function key written (e.g., or an ex‐
tended prefix key written (e.g., is interpreted as a builtin or
external command instead of an editor command. Binds all keys to
the standard bindings for the default editor, as per and Binds
all keys to -style bindings. Unsets is interpreted as a symbolic
arrow key name, which may be one of or Lists all editor commands
and a short description of each. Removes 's binding. Be care‐
ful: does bind to it unbinds completely. is taken as a literal
string and treated as terminal input when is typed. Bound keys
in are themselves reinterpreted, and this continues for ten lev‐
els of interpretation. Prints a usage message. Binds all keys
to -style bindings. Sets Forces a break from option processing,
so the next word is taken as even if it begins with may be a sin‐
gle character or a string. If a command is bound to a string,
the first character of the string is bound to and the entire
string is bound to the command. Control characters in can be
literal (they can be typed by preceding them with the editor com‐
mand normally bound to or written caret-character style, e.g.,
Delete is written (caret-question mark). and can contain back‐
slashed escape sequences (in the style of System V as follows:
Bell. Backspace. Escape. Form feed. Newline. Carriage re‐
turn. Horizontal tab. Vertical tab. The ASCII character corre‐
sponding to the octal number nullifies the special meaning of the
following character, if it has any, notably and Passes to the
BS2000 command interpreter for execution. Only non-interactive
commands can be executed, and it is not possible to execute any
command that would overlay the image of the current process, like
/EXECUTE or /CALL-PROCEDURE. (BS2000 only) Causes execution to
resume after the of the nearest enclosing or The remaining com‐
mands on the current line are executed. Multi-level breaks are
thus possible by writing them all on one line. Causes a break
from a resuming after the Prints the names of all builtin com‐
mands. A synonym for the builtin command. Available only if the
shell was so compiled; see the shell variable. A label in a
statement as discussed below. If a directory is given, changes
the shell's working directory to If not, changes to unless the
variable is not set, in which case a is required. If is it is
interpreted as the previous working directory (see (+) If is not
a subdirectory of the current directory (and does not begin with
or each component of the variable is checked to see if it has a
subdirectory Finally, if all else fails but is a shell variable
whose value begins with or then this is tried to see if it is a
directory, and the option is implied. With prints the final di‐
rectory stack, just like The and flags have the same effect on as
on and they imply (+). Using forces a break from option process‐
ing so the next word is taken as the directory even if it begins
with (+). See also the and shell variables. A synonym for the
builtin command. ... (+) Without arguments, lists all comple‐
tions. With lists completions for With and ..., defines comple‐
tions. may be a full command name or a glob-pattern (see It can
begin with to indicate that completion should be used only when
is ambiguous. specifies which word relative to the current word
is to be completed, and may be one of the following: Current-word
completion. is a glob-pattern which must match the beginning of
the current word on the command line. is ignored when completing
the current word. Like but includes when completing the current
word. Next-word completion. is a glob-pattern which must match
the beginning of the previous word on the command line. Like but
must match the beginning of the word two before the current word.
Position-dependent completion. is a numeric range, with the same
syntax used to index shell variables, which must include the cur‐
rent word. the list of possible completions, may be one of the
following: Aliases. Bindings (editor commands). Commands
(builtin or external commands). External commands which begin
with the supplied path prefix. Directories. Directories which
begin with the supplied path prefix. Environment variables.
Filenames. Filenames which begin with the supplied path prefix.
Groupnames. Jobs. Limits. Nothing. Shell variables. Signals.
Plain files. Plain files which begin with the supplied path pre‐
fix. Any variables. Usernames. Like but prints when is used.
Completions. Words from the variable Words from the given list.
Words from the output of command. is an optional glob-pattern.
If given, words from only that match are considered and the shell
variable is ignored. The types and may not have a pattern, and
uses as an explanatory message when the editor command is used.
is a single character to be appended to a successful completion.
If null, no character is appended. If omitted (in which case the
fourth delimiter can also be omitted), a slash is appended to di‐
rectories and a space to other words. invoked from has the addi‐
tional environment variable set, which contains (as its name in‐
dicates) contents of the current (already typed in) command line.
One can examine and use contents of the environment variable in a
custom script to build more sophisticated completions (see com‐
pletion for included in this package). Now for some examples.
Some commands take only directories as arguments, so there's no
point completing plain files. > complete cd 'p/1/d/' completes
only the first word following with a directory. -type completion
can also be used to narrow down command completion: > co[^D] com‐
plete compress > complete -co* 'p/0/(compress)/' > co[^D] > com‐
press This completion completes commands (words in position 0,
which begin with (thus matching to (the only word in the list).
The leading indicates that this completion is to be used with
only ambiguous commands. > complete find 'n/-user/u/' is an ex‐
ample of -type completion. Any word following and immediately
following is completed from the list of users. > complete cc
'c/-I/d/' demonstrates -type completion. Any word following and
beginning with is completed as a directory. is not taken as part
of the directory because we used lowercase Different are useful
with different commands. > complete alias 'p/1/a/' > complete
man 'p/*/c/' > complete set 'p/1/s/' > complete true 'p/1/x:Truth
has no options./' These complete words following with aliases,
with commands, and with shell variables. doesn't have any op‐
tions, so does nothing when completion is attempted and prints
when completion choices are listed. Note that the example, and
several other examples below, could just as well have used or as
Words can be completed from a variable evaluated at completion
time, > complete ftp 'p/1/$hostnames/' > set hostnames =
(rtfm.mit.edu tesla.ee.cornell.edu) > ftp [^D] rtfm.mit.edu
tesla.ee.cornell.edu > ftp [^C] > set hostnames = (rtfm.mit.edu
tesla.ee.cornell.edu uunet.uu.net) > ftp [^D] rtfm.mit.edu
tesla.ee.cornell.edu uunet.uu.net or from a command run at com‐
pletion time: > complete kill 'p/*/`ps | awk \{print\ \$1\}`/' >
kill -9 [^D] 23113 23377 23380 23406 23429 23529 23530 PID Note
that the command does not itself quote its arguments, so the
braces, space and in must be quoted explicitly. One command can
have multiple completions: > complete dbx 'p/2/(core)/' 'p/*/c/'
completes the second argument to with the word and all other ar‐
guments with commands. Note that the positional completion is
specified before the next-word completion. Because completions
are evaluated from left to right, if the next-word completion
were specified first it would always match and the positional
completion would never be executed. This is a common mistake
when defining a completion. The pattern is useful when a command
takes files with only particular forms as arguments. For exam‐
ple, > complete cc 'p/*/f:*.[cao]/' completes arguments to files
ending in only or can also exclude files, using negation of a
glob-pattern as described under One might use > complete rm
'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/' to exclude precious source
code from completion. Of course, one could still type excluded
names manually or override the completion mechanism using the or
editor commands. The and are like and respectively, but they use
the argument in a different way: to restrict completion to files
beginning with a particular path prefix. For example, the Elm
mail program uses as an abbreviation for one's mail directory.
One might use > complete elm c@=@F:$HOME/Mail/@ to complete as if
it were Note that we used the separator instead of to avoid con‐
fusion with the argument, and we used instead of because home di‐
rectory substitution works at only the beginning of a word. is
used to add a nonstandard suffix (not space or for directories)
to completed words. > complete finger 'c/*@/$hostnames/'
'p/1/u/@' completes arguments to from the list of users, appends
an and then completes after the from the variable. Note again
the order in which the completions are specified. Finally,
here's a complex example for inspiration: > complete find \
'n/-name/f/' 'n/-newer/f/' 'n/-{,n}cpio/f/' \ ´n/-exec/c/'
'n/-ok/c/' 'n/-user/u/' \ 'n/-group/g/' 'n/-fstype/(nfs 4.2)/' \
'n/-type/(b c d f l p s)/' \ ´c/-/(name newer cpio ncpio exec ok
user \ group fstype type atime ctime depth inum \ ls mtime
nogroup nouser perm print prune \ size xdev)/' \ 'p/*/d/' This
completes words following or (note the pattern which matches
both) to files, words following or to commands, words following
and to users and groups respectively and words following or to
members of the given lists. It also completes the switches them‐
selves from the given list (note the use of -type completion) and
completes anything not otherwise completed to a directory. Whew.
Remember that programmed completions are ignored if the word be‐
ing completed is a tilde substitution (beginning with or a vari‐
able (beginning with See also the builtin command. Continues ex‐
ecution of the nearest enclosing or The rest of the commands on
the current line are executed. Labels the default case in a
statement. It should come after all labels. (+) (+) The first
form prints the directory stack. The top of the stack is at the
left and the first directory in the stack is the current direc‐
tory. With or in the output is expanded explicitly to or the
pathname of the home directory for user (+) With entries are
wrapped before they reach the edge of the screen. (+) With en‐
tries are printed one per line, preceded by their stack posi‐
tions. (+) If more than one of or is given, takes precedence.
is accepted but does nothing. The second form with saves the di‐
rectory stack to as a series of and commands. The second form
with sources which is presumably a directory stack file saved by
the option or the mechanism. In either case, is used if is not
given and is used if is unset. Note that login shells do the
equivalent of on startup and, if is set, before exiting. Because
only is normally sourced before should be set in rather than The
third form clears the directory stack. Writes each to the
shell's standard output, separated by spaces and terminated with
a newline. The shell variable may be set to emulate (or not) the
flags and escape sequences of the BSD and/or System V versions of
see and Exercises the terminal capabilities (see in For example,
sends the cursor to the home position, sends it to column 3 and
row 10, and prints in the status line. If is or prints the value
of that capability or indicating that the terminal does or does
not have that capability). One might use this to make the output
from a shell script less verbose on slow terminals, or limit com‐
mand output to the number of lines on the screen: > set his‐
tory=`echotc lines` > @ history-- Termcap strings may contain
wildcards which will not echo correctly. One should use double
quotes when setting a shell variable to a terminal capability
string, as in the following example that places the date in the
status line: > set tosl="`echotc ts 0`" > set frsl="`echotc fs`"
> echo -n "$tosl";date; echo -n "$frsl" With nonexistent capabil‐
ities return the empty string rather than causing an error. With
messages are verbose. See the description of the and statements
below. Treats the arguments as input to the shell and executes
the resulting command(s) in the context of the current shell.
This is usually used to execute commands generated as the result
of command or variable substitution, because parsing occurs be‐
fore these substitutions. See for a sample use of Executes the
specified in place of the current shell. The shell exits either
with the value of the specified (an expression, as described un‐
der or, without with the value 0. Brings the specified jobs (or,
without arguments, the current job) into the foreground, continu‐
ing each if it is stopped. may be a number, a string, or as de‐
scribed under See also the editor command. Applies (which is a
file inquiry operator as described under to each and returns the
results as a space-separated list. Successively sets the vari‐
able to each member of and executes the sequence of commands be‐
tween this command and the matching (Both and must appear alone
on separate lines.) The builtin command may be used to continue
the loop prematurely and the builtin command to terminate it pre‐
maturely. When this command is read from the terminal, the loop
is read once prompting with (or before any statements in the loop
are executed. If you make a mistake typing in a loop at the ter‐
minal you can rub it out. Prints the system execution path.
(TCF only) Prints the experimental version prefix. (TCF only)
Like but the parameter is not recognized and words are delimited
by null characters in the output. Useful for programs which wish
to use the shell to filename expand a list of words. is filename
and command-substituted to yield a string of the form The shell
rewinds its input as much as possible, searches for a line of the
form possibly preceded by blanks or tabs, and continues execution
after that line. Prints a statistics line indicating how effec‐
tive the internal hash table has been at locating commands (and
avoiding 's). An is attempted for each component of the where
the hash function indicates a possible hit, and in each component
which does not begin with a On machines without prints only the
number and size of hash buckets. (+) (+) The first form prints
the history event list. If is given only the most recent events
are printed or saved. With the history list is printed without
leading numbers. If is specified, timestamps are printed also in
comment form. This can be used to produce files suitable for
loading with or With the order of printing is most recent first
rather than oldest first. The second form with saves the history
list to If the first word of the shell variable is set to a num‐
ber, at most that many lines are saved. If the second word of is
set to the history list is merged with the existing history file
instead of replacing it (if there is one) and sorted by time
stamp. (+) Merging is intended for an environment like the X
Window System with several shells in simultaneous use. If the
second word of is and the third word is set to the history file
update will be serialized with other shell sessions that would
possibly like to merge history at exactly the same time. The
second form with appends (which is presumably a history list
saved by the option or the mechanism) to the history list. is
like but the contents of are merged into the history list and
sorted by timestamp. In either case, is used if is not given and
is used if is unset. Note that is exactly like except that it
does not require a filename. Note that login shells do the
equivalent of on startup and, if is set, before exiting. Because
only is normally sourced before should be set in rather than If
is set, the first and second forms print and save the literal
(unexpanded) form of the history list. The third form clears the
history list. With runs such that it will exit on a hangup sig‐
nal and arranges for the shell to send it a hangup signal when
the shell exits. Note that commands may set their own response
to hangups, overriding Without an argument, causes the non-inter‐
active shell only to exit on a hangup for the remainder of the
script. See also and the builtin command. If (an expression, as
described under evaluates true, then is executed. Variable sub‐
stitution on happens early, at the same time it does for the rest
of the command. must be a simple command, not an alias, a
pipeline, a command list or a parenthesized command list, but it
may have arguments. Input/output redirection occurs even if is
false and is thus executed; this is a bug. If the specified is
true then the commands to the first are executed; otherwise if is
true then the commands to the second are executed, etc. Any num‐
ber of pairs are possible; only one is needed. The part is like‐
wise optional. (The words and must appear at the beginning of
input lines; the must appear alone on its input line or after an
Adds each to the current environment. There is no way to remove
a shared library. (Domain/OS only) The first form lists the ac‐
tive jobs. With lists process IDs in addition to the normal in‐
formation. On TCF systems, prints the site on which each job is
executing. The second form with the option sets the process ti‐
tle to using where available. If no is provided, the process ti‐
tle will be cleared. The first form lists the signal names. The
second form sends the specified (or, if none is given, the TERM
(terminate) signal) to the specified jobs or processes. may be a
number, a string, or as described under Signals are either given
by number or by name (as given in stripped of the prefix There is
no default entering just does not send a signal to the current
job. If the signal being sent is TERM (terminate) or HUP
(hangup), then the job or process is sent a CONT (continue) sig‐
nal as well. Limits the consumption by the current process and
each process it creates to not individually exceed on the speci‐
fied If no is given, then the current limit for is printed. If
no is given, then all limitations are given. If the flag is
given, the hard limits are used instead of the current limits.
The hard limits impose a ceiling on the values of the current
limits. Only the super-user may raise the hard limits, but a
user may lower or raise the current limits within the legal
range. Controllable types currently include (if supported by the
OS): Maximum number of threads for this process. Size of the
largest core dump that will be created. Maximum number of cpu-
seconds to be used by each process. Maximum growth of the
data+stack region via beyond the end of the program text. Maxi‐
mum number of open files for this process. Largest single file
which can be created. Maximum amount of memory a process may al‐
locate per system call. Maximum number of kqueues allocated for
this process. Maximum number of locks for this user. Maximum
number of bytes in POSIX mqueues for this user. Maximum nice
priority the user is allowed to raise mapped from [19...-20] to
[0...39] for this user. Maximum number of simultaneous processes
for this user id. Maximum realtime priority for this user.
Timeout for RT tasks in microseconds for this user. Maximum num‐
ber of pending signals for this user. Maximum number of simulta‐
neous threads (lightweight processes) for this user id. Maximum
size which a process may lock into memory using Maximum amount of
physical memory a process may have allocated to it at a given
time. Maximum number of POSIX advisory locks for this user.
Maximum number of pseudo-terminals for this user. Maximum size
of socket buffer usage for this user. Maximum size of the auto‐
matically-extended stack region. Maximum amount of swap space
reserved or used for this user. Maximum number of threads for
this process. Maximum amount of virtual memory a process may
have allocated to it at a given time (address space). may be
given as a (floating point or integer) number followed by a scale
factor. For all limits other than the default scale is or (1024
bytes); a scale factor of or (1048576 bytes) or or (1073741824
bytes) may also be used. For the default scaling is while for
minutes or for hours, or a time of the form giving minutes and
seconds may be used. If is then the limitation on the specified
is removed (this is equivalent to the builtin command). For both
names and scale factors, unambiguous prefixes of the names suf‐
fice. Prints the shell variable and reports on each user indi‐
cated in who is logged in, regardless of when they last logged
in. See also Terminates a login shell, replacing it with an in‐
stance of This is one way to log off, included for compatibility
with Terminates a login shell. Especially useful if is set. (+)
Lists files like but much faster. identifies each type of spe‐
cial file in the listing with a special character suffix: Direc‐
tory. Executable. Block device. Character device. Named pipe
(systems with named pipes only). Socket (systems with sockets
only). Symbolic link (systems with symbolic links only). Hidden
directory (AIX only) or context dependent (HP/UX only). Network
special (HP/UX only). If the shell variable is set, symbolic
links are identified in more detail (on only systems that have
them, of course): Symbolic link to a non-directory. Symbolic
link to a directory. Orphaned (broken) symbolic link. also
slows down and causes partitions holding files pointed to by sym‐
bolic links to be mounted. If the shell variable is set to or or
any combination thereof (e.g., they are used as flags to making
it act like ls -xF ls -Fa ls -FA or a combination, for example On
machines where is not the default, acts like unless contains an
in which case it acts like passes its arguments to if it is given
any switches, so generally does the right thing. The builtin can
list files using different colors depending on the file type or
extension. See the shell variable and the and environment vari‐
ables. The first form migrates the process or job to the site
specified or the default site determined by the system path.
(TCF only) The second form is equivalent to in that it migrates
the current process to the specified site. Migrating the shell
itself can cause unexpected behavior, because the shell does not
like to lose its tty. (TCF only) Equivalent to as per Available
only if the shell was so compiled; see the shell variable. In‐
crements the scheduling priority for the shell by or, without by
4. With runs at the appropriate priority. The greater the the
less cpu the process gets. The super-user may decrement the pri‐
ority by using is always executed in a sub-shell, and the re‐
strictions placed on commands in simple statements apply. With
runs such that it will ignore hangup signals. Note that commands
may set their own response to hangups, overriding Without an ar‐
gument, causes the non-interactive shell only to ignore hangups
for the remainder of the script. See also and the builtin com‐
mand. Causes the shell to notify the user asynchronously when
the status of any of the specified jobs (or, without the current
job) changes, instead of waiting until the next prompt as is
usual. may be a number, a string, or as described under See also
the shell variable. Controls the action of the shell on inter‐
rupts. Without arguments, restores the default action of the
shell on interrupts, which is to terminate shell scripts or to
return to the terminal command input level. With causes all in‐
terrupts to be ignored. With causes the shell to execute a when
an interrupt is received or a child process terminates because it
was interrupted. is ignored if the shell is running detached and
in system startup files (see where interrupts are disabled any‐
way. Without arguments, pops the directory stack and returns to
the new top directory. With a number discards the th entry in
the stack. Finally, all forms of print the final directory
stack, just like The shell variable can be set to prevent this
and the flag can be given to override The and flags have the same
effect on as on (+) Prints the names and values of all environ‐
ment variables or, with the value of the environment variable
Without arguments, exchanges the top two elements of the direc‐
tory stack. If is set, without arguments acts as like (+) With
pushes the current working directory onto the directory stack and
changes to If is it is interpreted as the previous working direc‐
tory (see (+) If is set, removes any instances of from the stack
before pushing it onto the stack. (+) With a number rotates the
th element of the directory stack around to be the top element
and changes to it. If is set, however, extracts the th direc‐
tory, pushes it onto the top of the stack and changes to it. (+)
Finally, all forms of print the final directory stack, just like
The shell variable can be set to prevent this and the flag can be
given to override The and flags have the same effect on as on (+)
Causes the internal hash table of the contents of the directories
in the variable to be recomputed. This is needed if the shell
variable is not set and new commands are added to directories in
while you are logged in. With a new command will be found auto‐
matically, except in the special case where another command of
the same name which is located in a different directory already
exists in the hash table. Also flushes the cache of home direc‐
tories built by tilde expansion. The specified which is subject
to the same restrictions as the in the one line statement above,
is executed times. I/O redirections occur exactly once, even if
is 0. Changes the rootnode to so that will be interpreted as
(Domain/OS only) (+) The first form prints the scheduled-event
list. The shell variable may be set to define the format in
which the scheduled-event list is printed. The second form adds
to the scheduled-event list. For example, > sched 11:00 echo
It\'s eleven o\'clock. causes the shell to echo at 11 AM. The
time may be in 12-hour AM/PM format > sched 5pm set prompt='[%h]
It\'s after 5; go home: >' or may be relative to the current
time: > sched +2:15 /usr/lib/uucp/uucico -r1 -sother A relative
time specification may not use AM/PM format. The third form re‐
moves item from the event list: > sched 1 Wed Apr 4 15:42
/usr/lib/uucp/uucico -r1 -sother 2 Wed Apr 4 17:00 set
prompt=[%h] It's after 5; go home: > > sched -2 > sched 1 Wed
Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother A command in the
scheduled-event list is executed just before the first prompt is
printed after the time when the command is scheduled. It is pos‐
sible to miss the exact time when the command is to be run, but
an overdue command will execute at the next prompt. A command
which comes due while the shell is waiting for user input is exe‐
cuted immediately. However, normal operation of an already-run‐
ning command will not be interrupted so that a scheduled-event
list element may be run. This mechanism is similar to, but not
the same as, the command on some Unix systems. Its major disad‐
vantage is that it may not run a command at exactly the specified
time. Its major advantage is that because runs directly from the
shell, it has access to shell variables and other structures.
This provides a mechanism for changing one's working environment
based on the time of day. (+) The first form of the command
prints the value of all shell variables. Variables which contain
more than a single word print as a parenthesized word list. The
second form sets to the null string. The third form sets to the
single The fourth form sets to the list of words in In all cases
the value is command and filename expanded. If is specified, the
value is set read-only. If or are specified, set only unique
words keeping their order. prefers the first occurrence of a
word, and the last. The fifth form sets the 'th component of to
this component must already exist. The sixth form lists only the
names of all shell variables that are read-only. The seventh
form makes read-only, whether or not it has a value. The eighth
form is the same as the third form, but make read-only at the
same time. These arguments can be repeated to set and/or make
read-only multiple variables in a single set command. Note, how‐
ever, that variable expansion happens for all arguments before
any setting occurs. Note also that can be adjacent to both and
or separated from both by whitespace, but cannot be adjacent to
only one or the other. See also the builtin command. Without
arguments, prints the names and values of all environment vari‐
ables. With sets the environment variable to or, without to the
null string. Equivalent to (Mach only) Sets the system execution
path. (TCF only) Tells the shell to believe that the terminal
capability (as defined in has the value No sanity checking is
done. Concept terminal users may have to to get proper wrapping
at the rightmost column. (+) Controls which tty modes (see the
shell does not allow to change. or tells to act on the or set of
tty modes respectively; without or is used. Without other argu‐
ments, lists the modes in the chosen set which are fixed on or
off The available modes, and thus the display, vary from system
to system. With lists all tty modes in the chosen set whether or
not they are fixed. With or fixes on or off or removes control
from in the chosen set. For example, fixes mode on and allows
commands to turn mode on or off, both when the shell is executing
commands. Set the experimental version prefix to or removes it
if is omitted. (TCF only) Without arguments, discards and shifts
the members of to the left. It is an error for not to be set or
to have fewer than one word as value. With performs the same
function on The shell reads and executes commands from The com‐
mands are not placed on the history list. If any are given, they
are placed in (+) commands may be nested; if they are nested too
deeply the shell may run out of file descriptors. An error in a
at any level terminates all nested commands. With commands are
placed on the history list instead of being executed, much like
Stops the specified jobs or processes which are executing in the
background. may be a number, a string, or as described under
There is no default entering just does not stop the current job.
Causes the shell to stop in its tracks, much as if it had been
sent a stop signal with This is most often used to stop shells
started by Each case label is successively matched, against the
specified 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 label is
found, then the execution begins after the label. Each case la‐
bel and the label must appear at the beginning of a line. The
command causes execution to continue after the Otherwise control
may fall through case labels and default labels as in C. If no
label matches and there is no default, execution continues after
the Lists the values of all terminal capabilities (see Tests if
(or the current value of if no is given) has an entry in the
hosts database. Prints the terminal type to stdout and returns 0
if an entry is present otherwise returns 1. Executes (which must
be a simple command, not an alias, a pipeline, a command list or
a parenthesized command list) and prints a time summary as de‐
scribed under the variable. If necessary, an extra shell is cre‐
ated to print the time statistic when the command completes.
Without prints a time summary for the current shell and its chil‐
dren. Sets the file creation mask to which is given in octal.
Common values for the mask are 002, giving all access to the
group and read and execute access to others, and 022, giving read
and execute access to the group and others. Without prints the
current file creation mask. Removes all aliases whose names
match Thus removes all aliases. It is not an error for nothing
to be ed. Removes all completions whose names match Thus removes
all completions. It is not an error for nothing to be d. Dis‐
ables use of the internal hash table to speed location of exe‐
cuted programs. Sets the universe to (Masscomp/RTU only) Removes
the limitation on or, if no is specified, all limitations. With
the corresponding hard limits are removed. Only the super-user
may do this. Note that may not exit successful, since most sys‐
tems do not allow to be unlimited. With errors are ignored. Re‐
moves all variables whose names match unless they are read-only.
Thus removes all variables unless they are read-only; this is a
bad idea. It is not an error for nothing to be Removes all envi‐
ronment variables whose names match Thus removes all environment
variables; this is a bad idea. It is not an error for nothing to
be ed. Without arguments, prints With sets to With and executes
under may be or (Domain/OS only) The shell waits for all back‐
ground jobs. If the shell is interactive, an interrupt will dis‐
rupt the wait and cause the shell to print the names and job num‐
bers of all outstanding jobs. Sets the universe to (Convex/OS
only) An alternate name for the builtin command. Available only
if the shell was so compiled; see the shell variable. Reports
all known instances of including aliases, builtins and executa‐
bles in Displays the command that will be executed by the shell
after substitutions, searching, etc. The builtin command is just
like but it correctly reports aliases and builtins and is 10 to
100 times faster. See also the editor command. Executes the
commands between the and the matching while (an expression, as
described under evaluates non-zero. and must appear alone on
their input lines. and may be used to terminate or continue the
loop prematurely. If the input is a terminal, the user is
prompted the first time through the loop as with If set, each of
these aliases executes automatically at the indicated time. They
are all initially undefined. Supported special aliases are: Runs
when the shell wants to ring the terminal bell. Runs after every
change of working directory. For example, if the user is working
on an X window system using and a re-parenting window manager
that supports title bars such as and does > alias cwdcmd 'echo
-n "^[]2;${HOST}:$cwd ^G"' then the shell will change the title
of the running to be the name of the host, a and the full current
working directory. A fancier way to do that is > alias cwdcmd
'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"' This will put the
hostname and working directory on the title bar but only the
hostname in the icon manager menu. Note that putting a or in may
cause an infinite loop. It is the author's opinion that anyone
doing so will get what they deserve. Runs before each command
gets executed, or when the command changes state. This is simi‐
lar to but it does not print builtins. > alias jobcmd 'echo -n
"^[]2\;\!#:q^G"' then executing will put the command string in
the xterm title bar. Invoked by the editor command. The command
name for which help is sought is passed as sole argument. For
example, if one does > alias helpcommand '\!:1 --help' then the
help display of the command itself will be invoked, using the GNU
help calling convention. Currently there is no easy way to ac‐
count for various calling conventions (e.g., the customary Unix
except by using a table of many commands. Runs every minutes.
This provides a convenient means for checking on common but in‐
frequent changes such as new mail. For example, if one does >
set tperiod = 30 > alias periodic checknews then the program runs
every 30 minutes. If is set but is unset or set to 0, behaves
like Runs just before each prompt is printed. For example, if
one does > alias precmd date then runs just before the shell
prompts for each command. There are no limits on what can be set
to do, but discretion should be used. Runs before each command
gets executed. > alias postcmd 'echo -n "^[]2\;\!#:q^G"' then
executing will put the command string in the xterm title bar.
Specifies the interpreter for executable scripts which do not
themselves specify an interpreter. The first word should be a
full path name to the desired interpreter (e.g., or The variables
described in this section have special meaning to the shell. The
shell sets and at startup; they do not change thereafter unless
changed by the user. The shell updates and when necessary, and
sets on logout. The shell synchronizes and with the environment
variables of the same names: whenever the environment variable
changes the shell changes the corresponding shell variable to
match (unless the shell variable is read-only) and vice versa.
Note that although and have identical meanings, they are not syn‐
chronized in this manner, and that the shell automatically con‐
verts between the different formats of and Supported special
shell variables are: If set, filename completion adds to the end
of directories and a space to the end of normal files when they
are matched exactly. Set by default. If set, 's autolock fea‐
ture uses its value instead of the local username for kerberos
authentication. If set, all times are shown in 12-hour AM/PM
format. This variable selects what is propagated to the value of
the variable. For more information see the description of the
variable below. The arguments to the shell. Positional parame‐
ters are taken from i.e., is replaced by etc. Set by default,
but usually empty in interactive shells. If set, the editor com‐
mand is invoked automatically before each completion attempt. If
set, the editor command is invoked automatically before each com‐
pletion attempt. If this is set to then only history will be ex‐
panded and a second completion will expand filenames. If set,
possibilities are listed after an ambiguous completion. If set
to possibilities are listed only when no new characters are added
by completion. The first word is the number of minutes of inac‐
tivity before automatic logout. The optional second word is the
number of minutes of inactivity before automatic locking. When
the shell automatically logs out, it prints sets the variable to
and exits. When the shell automatically locks, the user is re‐
quired to enter their password to continue working. Five incor‐
rect attempts result in automatic logout. Set to (automatic lo‐
gout after 60 minutes, and no locking) by default in login and
superuser shells, but not if the shell thinks it is running under
a window system (i.e., the environment variable is set), the tty
is a pseudo-tty (pty) or the shell was not so compiled (see the
shell variable). Unset or set it to to disable automatic logout.
See also the and shell variables. If set, the internal hash ta‐
ble of the contents of the directories in the variable will be
recomputed if a command is not found in the hash table. In addi‐
tion, the list of available commands will be rebuilt for each
command completion or spelling correction attempt if set to or
respectively; if set to this will be done for both cases. If
set, backslashes (`\') always quote and This may make complex
quoting tasks easier, but it can cause syntax errors in scripts.
The file name of the message catalog. If set, uses as a message
catalog instead of default A list of directories in which should
search for subdirectories if they aren't found in the current di‐
rectory. If not set, requires a directory and will not go to the
directory if it's omitted. This is set by default. If set, it
enables color display for the builtin and it passes to (or if is
set). Alternatively, it can be set to only or only to enable
color for a specific command. Setting it to nothing is equiva‐
lent to setting it to Color is disabled if the output is not di‐
rected to a terminal, unless is set. If set, it enables color
escape sequence for NLS message files, and display colorful NLS
messages. If set, the command which was passed to the shell with
the flag. If set, the shell will evaluate expressions right to
left, like the original If set to the completion becomes case in‐
sensitive. If set to completion ignores case and considers hy‐
phens and underscores to be equivalent; it will also treat peri‐
ods, hyphens and underscores and as word separators. If set to
completion matches uppercase and underscore characters explicitly
and matches lowercase and hyphens in a case-insensitive manner;
it will treat periods, hyphens and underscores as word separa‐
tors. If set to a list of commands, the shell will continue the
listed commands, instead of starting a new one. Same as con‐
tinue, but the shell will execute: echo `pwd` $argv >
~/.<cmd>_pause; %<cmd> If set to commands are automatically
spelling-corrected. If set to commands are automatically com‐
pleted. If set to the entire command line is corrected. If set,
newlines and carriage returns in command substitution are re‐
placed by spaces. Set by default. The full pathname of the cur‐
rent directory. See also the and shell variables. If set, ex‐
tracts the th directory from the directory stack rather than ro‐
tating it to the top. The default location in which and look for
a history file. If unset, is used. Because only is normally
sourced before should be set in rather than An array of all the
directories on the directory stack. is the current working di‐
rectory, the first directory on the stack, etc. Note that the
current working directory is but in directory stack substitu‐
tions, etc. One can change the stack arbitrarily by setting but
the first element (the current working directory) is always cor‐
rect. See also the and shell variables. Has an effect only if
is listed as part of the shell variable. If set to it enables
display and editing EUC-kanji(Japanese) code. If set to it en‐
ables display and editing Shift-JIS(Japanese) code. If set to it
enables display and editing Big5(Chinese) code. If set to it en‐
ables display and editing Utf8(Unicode) code. If set to 256
characters in the following format, it enables display and edit‐
ing of original multi-byte code format: Each character in the 256
character value corresponds (from left to right) to the ASCII
codes 0x00, 0x01, 0x02, ..., 0xfd, 0xfe, 0xff at the same index.
Each character is set to number 0, 1, 2 or 3, with the meaning:
Not used for multi-byte characters. Used for the first byte of a
multi-byte character. Used for the second byte of a multi-byte
character. Used for both the first byte and second byte of a
multi-byte character. For example, if set to 256 characters
starting with the value is interpreted as: The GNU coreutils ver‐
sion of cannot display multi-byte filenames without the option.
If you are using this version, set the second word of dspmbyte to
If not, for example, cannot display multi-byte filenames. Note
that this variable can only be used if KANJI and DSPMBYTE has
been defined at compile time. If set, removes any instances of
from the stack before pushing it onto the stack. If set, each
command with its arguments is echoed just before it is executed.
For non-builtin commands all expansions occur before echoing.
Builtin commands are echoed before command and filename substitu‐
tion, because these substitutions are then done selectively. Set
by the command line option. The style of the builtin. May be
set to: Don't echo a newline if the first argument is the default
for Recognize backslashed escape sequences in echo strings. Rec‐
ognize both the flag and backslashed escape sequences; the de‐
fault for Recognize neither. Set by default to the local system
default. The BSD and System V options are described in the man
pages on the appropriate systems. If set, the command-line edi‐
tor is used. Set by default in interactive shells. A list of
command names for the editor command to match. If not set, the
if unset) and if unset) environment variables will be used in‐
stead. If set, the and prompt sequences (see the shell variable)
indicate skipped directories with an ellipsis instead of The
user's effective user ID. The first matching passwd entry name
corresponding to the effective user ID. Lists file name suffixes
to be ignored by completion. In completion is always used and
this variable is ignored by default. If is unset, then the tra‐
ditional completion is used. If set in filename completion is
used. The user's real group ID. If set, wild-card glob patterns
will match files and directories beginning with except for and If
set, the and file glob patterns will match any string of charac‐
ters including traversing any existing sub-directories. For ex‐
ample, will list all the .c files in the current directory tree.
If used by itself, it will match zero or more sub-directories.
For example, will list any file named in the directory tree;
whereas will match any file in the directory tree ending in To
prevent problems with recursion, the glob-pattern will not de‐
scend into a symbolic link containing a directory. To override
this, use The user's group name. If set, the incremental search
match (in and and the region between the mark and the cursor are
highlighted in reverse video. Highlighting requires more fre‐
quent terminal writes, which introduces extra overhead. If you
care about terminal performance, you may want to leave this un‐
set. A string value determining the characters used in The first
character of its value is used as the history substitution char‐
acter, replacing the default character The second character of
its value replaces the character in quick substitutions. Con‐
trols handling of duplicate entries in the history list. If set
to only unique history events are entered in the history list.
If set to and the last history event is the same as the current
command, then the current command is not entered in the history.
If set to and the same event is found in the history list, that
old event gets erased and the current one gets inserted. Note
that the and options renumber history events so there are no
gaps. The default location in which and look for a history file.
If unset, is used. is useful when sharing the same home direc‐
tory between different machines, or when saving separate histo‐
ries on different terminals. Because only is normally sourced
before should be set in rather than If set, builtin and editor
commands and the mechanism use the literal (unexpanded) form of
lines in the history list. See also the editor command. The
first word indicates the number of history events to save. The
optional second word (+) indicates the format in which history is
printed; if not given, is used. The format sequences are de‐
scribed below under note the variable meaning of Set to by de‐
fault. Initialized to the home directory of the invoker. The
filename expansion of refers to this variable. If set to the
empty string or and the input device is a terminal, the command
(usually generated by the user by typing on an empty line) causes
the shell to print instead of exiting. This prevents the shell
from accidentally being killed. Historically this setting exited
after 26 successive EOF's to avoid infinite loops. If set to a
number the shell ignores - 1 consecutive s and exits on the th
(+). If unset, is used, i.e., the shell exits on a single If
set, the shell treats a directory name typed as a command as
though it were a request to change to that directory. If set to
the change of directory is echoed to the standard output. This
behavior is inhibited in non-interactive shell scripts, or for
command strings with more than one word. Changing directory
takes precedence over executing a like-named command, but it is
done after alias substitutions. Tilde and variable expansions
work as expected. If set to or puts the editor into that input
mode at the beginning of each line. Controls handling of dupli‐
cate entries in the kill ring. If set to only unique strings are
entered in the kill ring. If set to and the last killed string
is the same as the current killed string, then the current string
is not entered in the ring. If set to and the same string is
found in the kill ring, the old string is erased and the current
one is inserted. Indicates the number of killed strings to keep
in memory. Set to by default. If unset or set to less than the
shell will only keep the most recently killed string. Strings
are put in the killring by the editor commands that delete (kill)
strings of text, e.g. etc, as well as the command. The editor
command will yank the most recently killed string into the com‐
mand-line, while (see can be used to yank earlier killed strings.
If set to or or any combination thereof (e.g., they are used as
flags to making it act like ls -xF ls -Fa ls -FA or a combina‐
tion, for example If the first word contains shows all files
(even if they start with a If the first word contains shows all
files but and If the first word contains sorts across instead of
down. If the second word of is set, it is used as the path to If
set, all jobs are listed when a job is suspended. If set to the
listing is in long format. If set, the builtin command shows the
type of file to which each symbolic link points. The maximum
number of items which the editor command will list without asking
first. The maximum number of rows of items which the editor com‐
mand will list without asking first. Set by the shell if it is a
login shell. Setting or unsetting it within a shell has no ef‐
fect. See also Set by the shell to before a normal logout, be‐
fore an automatic logout, and if the shell was killed by a hangup
signal (see See also the shell variable. A list of files and di‐
rectories to check for incoming mail, optionally preceded by a
numeric word. Before each prompt, if 10 minutes have passed
since the last check, the shell checks each file and displays
(or, if contains multiple files, if the filesize is greater than
zero in size and has a modification time greater than its access
time. If you are in a login shell, then no mail file is reported
unless it has been modified after the time the shell has started
up, to prevent redundant notifications. Most login programs will
tell you whether or not you have mail when you log in. If a file
specified in is a directory, the shell will count each file
within that directory as a separate message, and will report or
as appropriate. This functionality is provided primarily for
those systems which store mail in this manner, such as the Andrew
Mail System. If the first word of is numeric it is taken as a
different mail checking interval, in seconds. Under very rare
circumstances, the shell may report instead of If set to comple‐
tion never beeps. If set to it beeps only when there is no
match. If set to it beeps when there are multiple matches. If
set to it beeps when there is one exact and other longer matches.
If unset, is used. If set, beeping is completely disabled. See
also If set, restrictions are placed on output redirection to in‐
sure that files are not accidentally destroyed and that redirec‐
tions refer to existing files, as described in the section. If
contains an interacive confirmation is presented, rather than an
error. If contains is allowed on empty files. If set, disable
the printing of in the time specifiers at the change of hour. If
set, and are inhibited. This is most useful in shell scripts
which do not deal with filenames, or after a list of filenames
has been obtained and further expansions are not desirable. If
set and the shell supports Kanji (see the shell variable), it is
disabled so that the meta key can be used. If set, a or which
does not match any existing files is left untouched rather than
causing an error. It is still an error for the substitution to
be malformed. For example, still gives an error. A list of di‐
rectories (or glob-patterns which match directories; see that
should not be during a completion operation. This is usually
used to exclude directories which take too much time to for exam‐
ple If set, the shell announces job completions asynchronously.
The default is to present job completions just before printing a
prompt. The user's real organization ID. (Domain/OS only) The
old working directory, equivalent to the used by and See also the
and shell variables. If set, enable the printing of padding '0'
for hours, in 24 and 12 hour formats. E.g., versus To retain
compatibily with older versions numeric variables starting with 0
are not interpreted as octal. Setting this variable enables
proper octal parsing. A list of directories in which to look for
executable commands. A null word specifies the current direc‐
tory. If there is no variable then only full path names will ex‐
ecute. is set by the shell at startup from the environment vari‐
able or, if does not exist, to a system-dependent default, such
as The shell may put first or last in or omit it entirely depend‐
ing on how it was compiled; see the shell variable. A shell
which is given neither the nor the option hashes the contents of
the directories in after reading and each time is reset. If one
adds a new command to a directory in while the shell is active,
one may need to do a for the shell to find it. If set and an in‐
teractive program exits with a non-zero status, the shell prints
The string which is printed before reading each command from the
terminal. may include any of the following formatting sequences
(+), which are replaced by the given information: The current
working directory. The current working directory, but with one's
home directory represented by and other users' home directories
represented by as per substitution happens only if the shell has
already used in a pathname in the current session. The trailing
component of the current working directory, or trailing compo‐
nents if a digit is given. If begins with the number of skipped
components precede the trailing component(s) in the format If the
shell variable is set, skipped components are represented by an
ellipsis so the whole becomes substitution is done as in above,
but the component is ignored when counting trailing components.
Like but without substitution. The current history event number.
The full hostname. The hostname up to the first Start (stop)
standout mode. Start (stop) boldfacing mode. Start (stop) un‐
derline mode. The time of day in 12-hour AM/PM format. Like but
in 24-hour format (but see the shell variable). The time of day
in 12-hour AM/PM format, with seconds. Like but in 24-hour for‐
mat (but see the shell variable). is parsed as in is parsed as
in A single The user name. The effective user name. The number
of jobs. The weekday in format. The day in format. The month
in format. The month in format. The year in format. The year
in format. The shell's tty. Clears from the end of the prompt
to end of the display or the end of the line. Expands the shell
or environment variable name immediately after the (or the first
character of the shell variable) for normal users, (or the second
character of for the superuser. Includes as a literal escape se‐
quence. It should be used only to change terminal attributes and
should not move the cursor location. This cannot be the last se‐
quence in The return code of the command executed just before the
prompt. In the status of the parser. In the corrected string.
In the history string. and are available in only eight-bit-clean
shells; see the shell variable. The bold, standout and underline
sequences are often used to distinguish a superuser shell. For
example, If or is used, and is not set, then print on the change
of hour (i.e, minutes) instead of the actual time. Set by de‐
fault to in interactive shells. The string with which to prompt
in and loops and after lines ending in The same format sequences
may be used as in note the variable meaning of Set by default to
in interactive shells. The string with which to prompt when con‐
firming automatic spelling correction. The same format sequences
may be used as in note the variable meaning of Set by default to
in interactive shells. If set (to a two-character string), the
formatting sequence in the shell variable is replaced with the
first character for normal users and the second character for the
superuser. If set, without arguments does like If set, and do
not print the directory stack. If set, completion completes on
an exact match even if a longer match is possible. If set, com‐
mand listing displays only files in the path that are executable.
Slow. If set, the user is prompted before is executed. The
string to print on the right-hand side of the screen (after the
command input) when the prompt is being displayed on the left.
It recognizes the same formatting characters as It will automati‐
cally disappear and reappear as necessary, to ensure that command
input isn't obscured, and will appear only if the prompt, command
input, and itself will fit together on the first line. If isn't
set, then will be printed after the prompt and before the command
input. If set, the shell does before exiting. If the first word
is set to a number, at most that many directory stack entries are
saved. If set, the shell does before exiting. If the first word
is set to a number, at most that many lines are saved. (The num‐
ber should be less than or equal to the number entries; if it is
set to greater than the number of settings, only entries will be
saved.) If the second word is set to the history list is merged
with the existing history file instead of replacing it (if there
is one) and sorted by time stamp and the most recent events are
retained. If the second word is set to and the third word is set
to the history file update will be serialized with other shell
sessions that would possibly like to merge history at exactly the
same time. (+) The format in which the builtin command prints
scheduled events; if not given, is used. The format sequences
are described above under note the variable meaning of The file
in which the shell resides. This is used in forking shells to
interpret files which have execute bits set, but which are not
executable by the system. (See the description of Initialized to
the (system-dependent) home of the shell. The number of nested
shells. Reset to 1 in login shells. See also The exit status
from the last command or backquote expansion, or any command in a
pipeline is propagated to (This is also the default behavior.)
This default does not match what POSIX mandates (to return the
status of the last command only). To match the POSIX behavior,
you need to unset If the variable is unset, the exit status of a
pipeline is determined only from the last command in the
pipeline, and the exit status of a backquote expansion is propa‐
gated to If a command terminated abnormally, then 0200 is added
to the status. Builtin commands which fail return exit status
all other builtin commands return status Can be set to several
different values to control symbolic link resolution: If set to
whenever the current directory changes to a directory containing
a symbolic link, it is expanded to the real name of the directory
to which the link points. This does not work for the user's home
directory; this is a bug. If set to the shell tries to construct
a current directory relative to the current directory before the
link was crossed. This means that through a symbolic link and
then returns one to the original directory. This affects only
builtin commands and filename completion. If set to the shell
tries to fix symbolic links by actually expanding arguments which
look like path names. This affects any command, not just
builtins. Unfortunately, this does not work for hard-to-recog‐
nize filenames, such as those embedded in command options. Ex‐
pansion may be prevented by quoting. While this setting is usu‐
ally the most convenient, it is sometimes misleading and some‐
times confusing when it fails to recognize an argument which
should be expanded. A compromise is to use and use the editor
command (bound by default to when necessary. Some examples are
in order. First, let's set up some play directories: > cd /tmp >
mkdir from from/src to > ln -s from/src to/dst Here's the behav‐
ior with unset, > cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..;
echo $cwd /tmp/from Here's the behavior with set to > cd
/tmp/to/dst; echo $cwd /tmp/from/src > cd ..; echo $cwd /tmp/from
Here's the behavior with set to > cd /tmp/to/dst; echo $cwd
/tmp/to/dst > cd ..; echo $cwd /tmp/to Here's the behavior with
set to > cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..; echo $cwd
/tmp/to > cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ".."; echo
$cwd /tmp/from > /bin/echo .. /tmp/to > /bin/echo ".." .. Note
that expansion: Works just like for builtins like Is prevented by
quoting. Happens before filenames are passed to non-builtin com‐
mands. The version number of the shell in the format where is
the major release number, the current version, and the patch‐
level. The terminal type. Usually set in as described under If
set to a number, then the builtin executes automatically after
each command which takes more than that many CPU seconds. If
there is a second word, it is used as a format string for the
output of the builtin. (u) The following sequences may be used
in the format string: The time the process spent in user mode in
cpu seconds. The time the process spent in kernel mode in cpu
seconds. The elapsed (wall clock) time in seconds. The CPU per‐
centage computed as (%U + %S) / %E. Number of times the process
was swapped. The average amount in (shared) text space used in
Kbytes. The average amount in (unshared) data/stack space used
in Kbytes. The total space used (%X + %D) in Kbytes. The maxi‐
mum memory the process had in use at any time in Kbytes. The
number of major page faults (page needed to be brought from
disk). The number of minor page faults. The number of input op‐
erations. The number of output operations. The number of socket
messages received. The number of socket messages sent. The num‐
ber of signals received. The number of voluntary context
switches (waits). The number of involuntary context switches.
Only the first four sequences are supported on systems without
BSD resource limit functions. The default time format is for
systems that support resource usage reporting and for systems
that do not. Under Sequent's DYNIX/ptx, and are not available,
but the following additional sequences are: The number of system
calls performed. The number of pages which are zero-filled on
demand. The number of times a process's resident set size was
increased by the kernel. The number of times a process's resi‐
dent set size was decreased by the kernel. The number of read
system calls performed. The number of write system calls per‐
formed. The number of reads from raw disk devices. The number
of writes to raw disk devices. and the default time format is
Note that the CPU percentage can be higher than 100% on multi-
processors. The period, in minutes, between executions of the
special alias. The name of the tty, or empty if not attached to
one. The user's real user ID. The user's login name. If set,
causes the words of each command to be printed, after history
substitution (if any). Set by the command line option. The ver‐
sion ID stamp. It contains the shell's version number (see ori‐
gin, release date, vendor, operating system and machine (see and
and a comma-separated list of options which were set at compile
time. Options which are set by default in the distribution are
noted. Supported options include: The shell is eight bit clean;
default. The shell is not eight bit clean. The shell is multi-
byte encoding clean (like UTF-8). The system's NLS is used; de‐
fault for systems with NLS. Login shells execute before instead
of after and before instead of after and is put last in for secu‐
rity; default. is omitted from for security. -style editing is
the default rather than -style. Login shells drop DTR when exit‐
ing. is a synonym for and is an alternate name for is enabled;
default. Kanji is used if appropriate according to locale set‐
tings, unless the shell variable is set. The system's is used.
The convention is emulated when executing shell scripts. The
builtin is available. The shell attempts to set the environment
variable. The shell verifies your password with the kerberos
server if local authentication fails. The shell variable or the
environment variable override your local username if set. An ad‐
ministrator may enter additional strings to indicate differences
in the local version. If unset, various key bindings change be‐
havior to be more -style: word boundaries are determined by ver‐
sus other characters. If set, various key bindings change behav‐
ior to be more -style: word boundaries are determined by versus
whitespace versus other characters; cursor behavior depends upon
current vi mode (command, delete, insert, replace). This vari‐
able is unset by and set by may be explicitly set or unset by the
user after those operations if required. If set, a screen flash
is used rather than the audible bell. See also A list of
user/terminal pairs to watch for logins and logouts. If either
the user is all terminals are watched for the given user and vice
versa. Setting to watches all users and terminals. For example,
set watch = (george ttyd1 any console $user any) reports activity
of the user on any user on the console, and oneself (or a tres‐
passer) on any terminal. Logins and logouts are checked every 10
minutes by default, but the first word of can be set to a number
to check every so many minutes. For example, set watch = (1 any
any) reports any login/logout once every minute. For the impa‐
tient, the builtin command triggers a report at any time. All
current logins are reported (as with the builtin) when is first
set. The shell variable controls the format of reports. The
format string for messages. The following sequences are replaced
by the given information: The name of the user who logged in/out.
The observed action, i.e., or The terminal (tty) on which the
user logged in/out. The full hostname of the remote host, or if
the login/logout was from the local host. The hostname of the
remote host up to the first The full name is printed if it is an
IP address or an X Window System display. and are available on
only systems that store the remote hostname in or If unset, is
used, or on systems which don't store the remote hostname. A
list of non-alphanumeric characters to be considered part of a
word by the etc., editor commands. If unset, the default value
is determined based on the state of if is unset, is used as the
default; if is set, is used as the default. Equivalent to the
shell variable. Color sequences for are normally disabled if the
output is not directed to a terminal. This can be overridden by
setting this variable, which also changes the invocation of to
use instead of Note that must be set for this environment vari‐
able to be effective; by itself does not enable color Set by to
the current command line when invoking programs for the mode See
in The number of columns in the terminal. See Used by X Window
System (see If set, the shell does not set The pathname to a de‐
fault editor. Used by the editor command if the the shell vari‐
able is unset. See also the environment variable. Equivalent to
the shell variable. Equivalent to the shell variable. Initial‐
ized to the name of the machine on which the shell is running, as
determined by the library call. Initialized to the type of ma‐
chine on which the shell is running, as determined at compile
time. This variable is obsolete and will be removed in a future
version. A list of directories in which the editor command looks
for command documentation. Gives the preferred character envi‐
ronment. See If set, only ctype character handling is changed.
See The number of lines in the terminal. See One of two environ‐
ment variables that may be used to define the per-file colors
used by (along with This variable is used by some BSD versions of
On startup, takes priority over If both or are the most recent is
used. If is while is still then is parsed again (with any warn‐
ings suppressed) to reapply its settings. This variable is a 22
character string containing a concatenation of 11 pairs of the
format where is the foreground color and is the background color.
If fewer than 11 pairs are provided, default colors are used for
the remaining entries. If more than 11 pairs are provided, the
extra values are ignored. The order of the color attribute pairs
to the equivalent variable, the file type, and default color, is
as follows: The color code designators are as follows: Black.
Red. Green. Yellow (or brown). Blue. Magenta. Cyan. Light
grey. Bold black, usually shows up as dark grey. Bold red.
Bold green. Bold yellow. Bold blue. Bold magenta. Bold cyan.
Bold light grey; looks like bright white. Default foreground or
background. Note that the above are standard ANSI colors. The
actual display may differ depending on the color capabilities of
the terminal in use. The default colors are as per the color
variables in and are not the same default colors as those used by
some BSD versions of One of two environment variables that may be
used to define the per-file colors used by (along with This vari‐
able is used by the GNU coreutils version of and may be setup by
On startup, takes priority over If both or are the most recent is
used. If is while is still then is parsed again (with any warn‐
ings suppressed) to reapply its settings. The format of this
variable is reminiscent of the file format; a list of expressions
of the form or The first form where is a two-character variable
name, supports the following variables, their associated default
ISO 6429 color code or escape sequences, and file type: You need
to include only the variables you want to change from the de‐
fault. The second form colorizes file names based on extension.
For example, using ISO 6429 codes, to color all C-language source
files blue you would specify This would color all files ending in
in blue foreground (34) color. Control characters can be written
either in C-style-escaped notation, or in stty-like ^-notation.
The C-style notation adds for Escape, for a normal space charac‐
ter, and for Delete. In addition, the escape character can be
used to override the default interpretation of and Each filename
will be output to the terminal as If the code is undefined, the
sequence will be used instead. This is generally more convenient
to use, but less general. The left code right code and end codes
are provided so you don't have to type common parts over and over
again and to support weird terminals; you will generally not need
to change them at all unless your terminal does not use ISO 6429
color codes but a different system. If your terminal uses ISO
6429 color codes, you can compose the type codes (i.e., all ex‐
cept the and codes) from numerical ISO 6429 color codes separated
by For example, is bright green foreground with default back‐
ground. The most common ISO 6429 color codes are: To restore de‐
fault color. Bold / brighter colors. Underlined text. Flashing
text. Black foreground. Red foreground. Green foreground.
Yellow (or brown) foreground. Blue foreground. Magenta fore‐
ground. Cyan foreground. White (or gray) foreground. Black
background. Red background. Green background. Yellow (or
brown) background. Blue background. Magenta background. Cyan
background. White (or gray) background. Not all ISO 6429 color
codes will work on all systems or display devices. A few termi‐
nal programs do not recognize the default end code properly. If
all text gets colorized after you do a directory listing, try
changing the and codes from 0 to the numerical codes for your
standard foreground and background colors. For symbolic links
the keyword can be set to which makes the file color the same as
the color of the link target. The machine type (microprocessor
class or machine model), as determined at compile time. If set,
printable characters are not rebound to See The operating system,
as determined at compile time. A list of directories in which to
look for executables. Equivalent to the shell variable, but in a
different format. Equivalent to the shell variable, but not syn‐
chronized to it; updated only after an actual directory change.
The host from which the user has logged in remotely, if this is
the case and the shell is able to determine it. Set only if the
shell was so compiled; see the shell variable. Equivalent to the
shell variable. The current system type. (Domain/OS only)
Equivalent to the shell variable. The terminal capability
string. See Equivalent to the shell variable. The vendor, as
determined at compile time. The pathname to a default full-
screen editor. Used by the editor command if the the shell vari‐
able is unset. See also the environment variable. Read first by
every shell. ConvexOS, Stellix and Intel use NeXTs use A/UX,
AMIX, Cray and IRIX have no equivalent in but read this file in
anyway. Solaris 2.x does not have it either, but reads (+) Read
by login shells after ConvexOS, Stellix and Intel use NeXTs use
Solaris 2.x uses A/UX, AMIX, Cray and IRIX use Read by every
shell after or its equivalent. Read by every shell, if doesn't
exist, after or its equivalent. This manual uses to mean or, if
is not found, Read by login shells after if is set, but see also
Read by login shells after or The shell may be compiled to read
before instead of after and see the shell variable. Read by lo‐
gin shells after if is set, but see also Read by login shells at
logout. ConvexOS, Stellix and Intel use NeXTs use A/UX, AMIX,
Cray and IRIX have no equivalent in but read this file in anyway.
Solaris 2.x does not have it either, but reads (+) Read by login
shells at logout after or its equivalent. Used to interpret
shell scripts not starting with a Temporary file for Source of
home directories for substitutions. The order in which startup
files are read may differ if the shell was so compiled; see and
the shell variable. This manual describes as a single entity,
but experienced users will want to pay special attention to 's
new features. A command-line editor, which supports -style or
-style key bindings. See and Programmable, interactive word com‐
pletion and listing. See and the and builtin commands. of file‐
names, commands and variables. which perform other useful func‐
tions in the middle of typed commands, including documentation
lookup quick editor restarting and command resolution An enhanced
history mechanism. Events in the history list are time-stamped.
See also the command and its associated shell variables, the pre‐
viously undocumented event specifier and new modifiers under the
and editor commands and the shell variable. Enhanced directory
parsing and directory stack handling. See the and commands and
their associated shell variables, the description of the and
shell variables and the and editor commands. Negation in glob-
patterns. See New and a builtin which uses them. A variety of
including scheduled events, special aliases, automatic logout and
terminal locking, command timing and watching for logins and lo‐
gouts. Support for the Native Language System (see OS variant
features (see and the shell variable) and system-dependent file
locations (see Extensive terminal-management capabilities. See
New builtin commands including and New variables that make useful
information easily available to the shell. See the and shell
variables and the and environment variables. A new syntax for
including useful information in the prompt string (see and spe‐
cial prompts for loops and spelling correction (see and Read-only
variables. See In 1964, DEC produced the PDP-6. The PDP-10 was
a later re-implementation. It was re-christened the DECsystem-10
in 1970 or so when DEC brought out the second model, the KI10.
TENEX was created at Bolt, Beranek & Newman (a Cambridge, Massa‐
chusetts think tank) in 1972 as an experiment in demand-paged
virtual memory operating systems. They built a new pager for the
DEC PDP-10 and created the OS to go with it. It was extremely
successful in academia. In 1975, DEC brought out a new model of
the PDP-10, the KL10; they intended to have only a version of
TENEX, which they had licensed from BBN, for the new box. They
called their version TOPS-20 (their capitalization is trade‐
marked). A lot of TOPS-10 users (`The OPerating System for
PDP-10') objected; thus DEC found themselves supporting two in‐
compatible systems on the same hardware--but then there were 6 on
the PDP-11! TENEX, and TOPS-20 to version 3, had command comple‐
tion via a user-code-level subroutine library called ULTCMD.
With version 3, DEC moved all that capability and more into the
monitor (`kernel' for you Unix types), accessed by the COMND%
JSYS (`Jump to SYStem' instruction, the supervisor call mechanism
[are my IBM roots also showing?]). The creator of tcsh was im‐
pressed by this feature and several others of TENEX and TOPS-20,
and created a version of csh which mimicked them. The system
limits argument lists to ARG_MAX characters. The number of argu‐
ments to a command which involves filename expansion is limited
to 1/6th 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 shell re‐
stricts the number of substitutions on a single line to 20.
See for descriptions of the following attributes:
box; cbp-1 | cbp-1 l | l . ATTRIBUTE TYPE ATTRIBUTE VALUE =
Availability shell/tcsh = Stability Volatile This manual
documents tcsh 6.24.13 (Astron) 2024-06-12.
Original author of IIASA, Laxenburg, Austria.
Job control and directory stack features. HP Labs, 1981.
File name completion. Fairchild, 1983.
Command name recognition/completion. Ohio State CIS Dept.,
1983-1993.
Command line editor, prompt routines, new glob syntax and numer‐
ous fixes and speedups. CCI, 1983-4.
Special aliases, directory stack extraction stuff, login/logout
watch, scheduled events, and the idea of the new prompt format.
University of Toronto, 1984.
and builtins and numerous bug fixes, modifications and speedups.
Caltech.
Fast storage allocator routines. TRW, 1987.
Incorporated 4.3BSD into Cornell U. EE Dept., 1987-94.
Ports to HPUX, SVR2 and SVR3, a SysV version of getwd.c,
SHORT_STRINGS support and a new version of sh.glob.c. BBN, and
OSU, 1988.
A/UX port. NNSC, 1988.
Kuck and Associates, Inc., 1988.
mode cleanup. Rensselaer Polytechnic Institute, 1989.
and ambiguous completion listing. DEC, 1989.
Newlines in the prompt. BBN, 1989.
Purdue Physics, 1989.
Magic space bar history expansion. Intel, 1989.
fixes and additions. Dept. of Computer Science, Keio University,
1989.
Automatic spelling correction and Ellemtel, Sweden, 1990-.
Various bugfixes, improvements and manual updates. Sun Sweden.
and
Interrupt handling fixes. Digital Equipment Corp.
Extended key support. Convex, 1990.
Convex support, lots of bug fixes, save and restore of directory
stack. Apple, 1990.
A/UX 2.0 (re)port. LTH Sweden, 1990.
NLS support and simulated NLS support for non NLS sites, fixes.
SICS Sweden, 1990.
Mach support, 8-bit printing. Sanyo Icon, 1990.
POSIX termio support, SysV limit fixes. Sequent, 1990-91.
Vi mode fixes, expand-line, window change fixes, Symmetry port.
Institut de recherche d'Hydro-Quebec, 1991.
beeping options, modified the history search to search for the
whole string from the beginning of the line to the cursor. Mo‐
torola, 1991.
Minix port. Sydney U. Australia, Physics Dept., 1991.
SVR4 job control fixes. 1991-.
Various portability and other fixes. Added (dollar-single-
quotes). Interactive Systems Corp., 1991.
Extended fixes and delete command. MIT, 1991.
ANSIfication fixes, new exec hashing code, imake fixes, 1991-.
Enhanced directory printing in Added and improvements. Manual
page improvements. sterling@netcom.com, 1991-1995.
ETA and Pyramid port, Makefile and lint fixes, addition, and var‐
ious other portability changes and bug fixes. 1992.
and 1992.
Coherent port. Mullard Space Science Lab U.K., 1992.
VMS-POSIX port. IBM Corp., 1992.
Walking process group fixes, bug fixes, POSIX file tests, POSIX
SIGHUP. Cray Computer Corp., 1992.
CSOS port. Rutgers University, 1992.
Tek, m88k, Titan and Masscomp ports and fixes. Added autoconf
support. Cornell University, 1992.
OS/2 port. liljeber@kruuna.Helsinki.FI, 1992.
Linux port. NASA Langley Research Center Operations, 1993.
Read-only variables. Yale University, 1993-4.
New man page and tcsh.man2html. Stanford University, 1993.
AFS and HESIOD patches. Silicon Graphics Inc., 1996.
Added implicit cd. 1997.
Ported to Siemens Nixdorf EBCDIC machine. Microsoft, 1997.
Ported to WIN32 (Windows/95 and Windows/NT); wrote all the miss‐
ing library and message catalog code to interface to Windows.
1998.
Color ls additions. Bryan Dunlap, Clayton Elwell, Karl Klein‐
paste, Bob Manson, Steve Romig, Diana Smetters, Bob Sutterfield,
Mark Verber, Elizabeth Zwicky and all the other people at Ohio
State for suggestions and encouragement All the people on the
net, for putting up with, reporting bugs in, and suggesting new
additions to each and every version Richard M. Alderson III, for
writing the section It is no longer possible for variables to
have a '-' or a '=' within the name. Any variables of this form
will generate a 'setenv: Syntax error' error message. When a
suspended command is restarted, the shell prints the directory it
started in if this is different from the current directory. This
can be misleading (i.e., wrong) as the job may have changed di‐
rectories internally. Shell builtin functions are not stop‐
pable/restartable. Command sequences of the form are also not
handled gracefully when stopping is attempted. If you suspend
the shell will then immediately execute This is especially no‐
ticeable if this expansion results from an It suffices to place
the sequence of commands in 's to force it to a subshell, i.e.,
Control over tty output after processes are started is primitive;
perhaps this will inspire someone to work on a good virtual ter‐
minal interface. In a virtual terminal interface much more in‐
teresting things could be done with output control. Alias sub‐
stitution is most often used to clumsily simulate shell proce‐
dures; shell procedures should be provided rather than aliases.
Control structures should be parsed rather than being recognized
as built-in commands. This would allow control commands to be
placed anywhere, to be combined with and to be used with and
metasyntax. doesn't ignore here documents when looking for its
It should be possible to use the modifiers on the output of com‐
mand substitutions. The screen update for lines longer than the
screen width is very poor if the terminal cannot move the cursor
up (i.e., terminal type and don't need to be environment vari‐
ables. Glob-patterns which do not use or or which use or are not
negated correctly. The single-command form of does output redi‐
rection even if the expression is false and the command is not
executed. includes file identification characters when sorting
filenames and does not handle control characters in filenames
well. It cannot be interrupted. Command substitution supports
multiple commands and conditions, but not cycles or backward s.
Report bugs at preferably with fixes. If you want to help main‐
tain and test tcsh, add yourself to the mailing list in
Source code for open source software components in Oracle Solaris
can be found at https://www.oracle.com/downloads/opensource/so‐
laris-source-code-downloads.html.
This software was built from source available at:
https://github.com/oracle/solaris-userland
The original community source was downloaded from:
https://astron.com/pub/tcsh/tcsh-6.24.13.tar.gz
Further information about this software can be found on the open
source community website at http://www.tcsh.org/.