xref: /freebsd/contrib/tcsh/tcsh.man.new (revision 780fb4a2)
1.\" $tcsh: tcsh.man.new,v 1.5 2016/11/24 15:06:09 christos Exp $
2.\" From: tcsh: tcsh.man,v 3.266 2016/11/24 15:04:52 christos Exp
3.\" Copyright (c) 1980, 1990, 1993
4.\"	The Regents of the University of California.  All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\" 3. Neither the name of the University nor the names of its contributors
15.\"    may be used to endorse or promote products derived from this software
16.\"    without specific prior written permission.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS `AS IS' AND
19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24.\" OR SERVICES; LESS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE.
29.\"
30.\" - Indent in multiples of 4, usually 8.
31.\"
32.\" - Use \` for literal back-quote (`).
33.\"
34.\" - Use \e for literal backslash (\).
35.\"
36.\" - Use \-, not -.
37.\"
38.\" - Include the tilde when naming dot files. .Pa ~/.login , not .Pa .login
39.\"
40.\" - Refer to external commands in man page format, e.g., .Xr csh 1
41.\" However, tcsh is .Nm , because this is the tcsh man page (and
42.\" see the next note anyway).
43.\"
44.\" - Say .Sq the shell , not .Sq tcsh ,
45.\" unless distinguishing between tcsh and csh.
46.\"
47.\" - Say .Sq shell variable / .Sq environment variable instead of
48.\" .Sq variable and .Sq builtin command / .Sq editor command instead of
49.\" .Sq builtin or .Sq command
50.\"   unless the distinction is absolutely clear from context.
51.\"
52.\" - Use the simple present tense.
53.\" .Sq The shell uses , not .Sq The shell will use
54.\"
55.\" - IMPORTANT: Cross-reference as much as possible. Commands, variables,
56.\"   etc. in the reference section should be mentioned in the appropriate
57.\"   descriptive section, or at least in the reference-section description
58.\"   of another command (or whatever) which is mentioned in a description
59.\"   section. Remember to note OS-specific things in "OS variant support",
60.\"   new features in NEW FEATURES and referenced external commands in SEE
61.\"   ALSO.
62.\"
63.\" - tcsh.man2html depends heavily on the specific nroff commands used in the
64.\"   man page when the script was written. Please stick closely to the style
65.\"   used here if you can. In particular, please don't use nroff commands
66.\"   which aren't already used herein.
67.\"
68.Dd November 24, 2016
69.Dt TCSH 1
70.Os Astron 6.20.00
71.Sh NAME
72.Nm tcsh
73.Nd C shell with file name completion and command line editing
74.Sh SYNOPSIS
75.Nm
76.Op Fl bcdefFimnqstvVxX
77.Op Fl Dname Ns Op =value
78.Op Ar arg ...
79.Nm
80.Fl l
81.Ek
82.Sh DESCRIPTION
83.Nm
84is an enhanced but completely compatible version of the Berkeley
85UNIX C shell,
86.Xr csh 1 .
87It is a command language interpreter usable both as an interactive login
88shell and a shell script command processor.
89It includes a command-line editor (see
90.Sx The command-line editor )
91programmable word completion (see
92.Sx Completion and listing )
93spelling correction (see
94.Sx Spelling correction ) ,
95a history mechanism (see
96.Sx History substitution ) ,
97job control (see
98.Sx Jobs )
99and a C-like syntax.
100The
101.Sx NEW FEATURES
102section describes major enhancements of
103.Nm
104over
105.Xr csh 1 .
106Throughout this manual, features of
107.Nm
108not found in most
109.Xr csh 1
110implementations
111(specifically, the 4.4BSD one)
112are labeled with
113.Sq (+) ,
114and features which are present in
115.Xr csh 1
116but not usually documented are labeled with
117.Sq (u) .
118.Bl -tag
119.Ss Argument list processing
120If the first argument (argument 0) to the shell is
121.Sq \-
122then it is a login shell.
123A login shell can be also specified by invoking the shell with
124the
125.Fl l
126flag as the only argument.
127.Pp
128The rest of the flag arguments are interpreted as follows:
129.Bl -tag -width indent
130.It Fl b
131Forces a
132.Dq break
133from option processing, causing any
134further shell arguments to be treated as non-option arguments.
135The remaining arguments will not be interpreted as shell options.
136This may be used to pass options to a shell script without confusion
137or possible subterfuge.
138The shell will not run a set-user ID script without this option.
139.It Fl c
140Commands are read from the following argument (which must be present, and
141must be a single argument),
142stored in the
143.Va command
144shell variable for reference, and executed.
145Any remaining arguments are placed in the
146.Va argv
147shell variable.
148.It Fl d
149The shell loads the directory stack from
150.Pa ~/.cshdirs
151as described under
152.Sx Startup and shutdown ,
153whether or not it is a login shell. (+)
154.It Fl Dname Ns Op =value
155Sets the environment variable
156.Va name
157.Dv value .
158(Domain/OS only) (+)
159.It Fl e
160The shell exits if any invoked command terminates abnormally or
161yields a non-zero exit status.
162.It Fl f
163The shell does not load any resource or startup files, or perform any
164command hashing, and thus starts faster.
165.It Fl F
166The shell uses
167.Xr fork 2
168instead of
169.Xr vfork 2
170to spawn processes. (+)
171.It Fl i
172The shell is interactive and prompts for its top-level input, even if
173it appears to not be a terminal.
174Shells are interactive without this option if
175their inputs and outputs are terminals.
176.It Fl l
177The shell is a login shell.
178Applicable only if
179.Fl l
180is the only
181flag specified.
182.It Fl m
183The shell loads
184.Pa ~/.tcshrc
185even if it does not belong to the effective user.
186Newer versions of
187.Xr su 1
188can pass
189.Fl m
190to the shell. (+)
191.It Fl n
192The shell parses commands but does not execute them.
193This aids in debugging shell scripts.
194.It Fl q
195The shell accepts SIGQUIT (see
196.Sx Signal handling )
197and behaves when it is used under a debugger.
198Job control is disabled. (u)
199.It Fl s
200Command input is taken from the standard input.
201.It Fl t
202The shell reads and executes a single line of input.
203A
204.Sq \e
205may be used to
206escape the newline at the end of this line and continue onto another line.
207.It Fl v
208Sets the
209.Va verbose
210shell variable, so that
211command input is echoed after history substitution.
212.It Fl x
213Sets the
214.Va echo
215shell variable, so that commands are echoed
216immediately before execution.
217.It Fl V
218Sets the
219.Va verbose
220shell variable even before executing
221.Pa ~/.tcshrc .
222.It Fl X
223Is to
224.Fl x
225as
226.Fl V
227is to
228.Fl v .
229.TP 4
230.It Fl \-help
231Print a help message on the standard output and exit. (+)
232.It Fl \-version
233Print the version/platform/compilation options on the standard output and exit.
234This information is also contained in the
235.Va version
236shell variable. (+)
237.El
238.Pp
239After processing of flag arguments, if arguments remain but none of the
240.Fl c ,
241.Fl i ,
242.Fl s ,
243or
244.Fl t
245options were given, the first argument is taken as the name of a file of
246commands, or
247.Dq script ,
248to be executed.
249The shell opens this file and saves its name for possible
250resubstitution by
251.Sq $0 .
252Because many systems use either the standard
253version 6 or version 7 shells whose shell scripts are not compatible
254with this shell, the shell uses such a
255.Sq standard
256shell to execute a script
257whose first character is not a
258.Sq # ,
259i.e., that does not start with a
260comment.
261.Pp
262Remaining arguments are placed in the
263.Va argv
264shell variable.
265.Ss Startup and shutdown
266A login shell begins by executing commands from the system files
267.Pa /etc/csh.cshrc
268and
269.Pa /etc/csh.login .
270It then executes commands from files in the user's
271.Pa home
272directory:
273first
274.Pa ~/.tcshrc (+)
275or, if
276.Pa ~/.tcshrc
277is not found,
278.Pa ~/.cshrc ,
279then
280.Pa ~/.history
281(or the value of the
282.Va histfile
283shell variable), then
284.Pa ~/.login ,
285and finally
286.Pa ~/.cshdirs
287(or the value of the
288.Va dirsfile
289shell variable) (+).
290The shell may read
291.Pa /etc/csh.login
292before instead of after
293.Pa /etc/csh.cshrc ,
294and
295.Pa ~/.login
296before instead of after
297.Pa ~/.tcshrc
298or
299.Pa ~/.cshrc
300and
301.Pa ~/.history ,
302if so compiled;
303see the
304.Va version
305shell variable. (+)
306.Pp
307Non-login shells read only
308.Pa /etc/csh.cshrc
309and
310.Pa ~/.tcshrc
311or
312.Pa ~/.cshrc
313on startup.
314.Pp
315For examples of startup files, please consult:
316.Lk http://tcshrc.sourceforge.net
317.Pp
318Commands like
319.Xr stty 1
320and
321.Xr tset 1 ,
322which need be run only once per login, usually go in one's
323.Pa ~/.login
324file.
325Users who need to use the same set of files with both
326.Xr csh 1
327and
328.Nm
329can have only a
330.Pa ~/.cshrc
331which checks for the existence of the
332.Va tcsh
333shell variable (q.v.) before using
334.Nm \-
335specific commands,
336or can have both a
337.Pa ~/.cshrc
338and a
339.Pa ~/.tcshrc
340which
341.Ic sources
342(see the builtin command)
343.Pa ~/.cshrc .
344The rest of this manual uses
345.Pa ~/.tcshrc
346to mean
347.Pa ~/.tcshrc
348or,
349if
350.Pa ~/.tcshrc
351is not found,
352.Pa ~/.cshrc .
353.Pp
354In the normal case, the shell begins reading commands from the terminal,
355prompting with
356.Sq >\~ .
357(Processing of arguments and the use of the shell to
358process files containing command scripts are described later.)
359The shell repeatedly reads a line of command input, breaks it into words,
360places it on the command history list, parses it and executes each command
361in the line.
362.Pp
363One can log out by typing
364.Sq ^D
365on an empty line,
366.Sq logout
367or
368.Sq login
369or
370via the shell's autologout mechanism (see the
371.Va autologout
372shell variable).
373When a login shell terminates it sets the
374.Va logout
375shell variable to
376.Sq normal
377or
378.Sq automatic
379as appropriate, then executes commands from the files
380.Pa /etc/csh.logout
381and
382.Pa ~/.logout .
383The shell may drop DTR on logout
384if so compiled; see the
385.Va version
386shell variable.
387.Pp
388The names of the system login and logout files vary from system to system for
389compatibility with different
390.Xr csh 1
391variants; see
392.Sx FILES .
393.Ss Editing
394We first describe
395.Sx The command-line editor"
396The
397.Sx Completion and listing
398and
399.Sx Spelling correction
400sections describe two sets of functionality that are implemented as editor
401commands but which deserve their own treatment.
402Finally,
403.Sx Editor commands
404lists and describes
405the editor commands specific to the shell and their default bindings.
406.It Sx The command-line editor (+)
407Command-line input can be edited using key sequences much like those used in
408.Xr emacs 1
409or
410.Xr vi 1 .
411The editor is active only when the
412.Va edit
413shell variable is set, which it is by default in interactive shells.
414The
415.Ic bindkey
416builtin can display and change key bindings.
417.Xr emacs 1
418style key bindings are used by default
419(unless the shell was compiled otherwise; see the
420.Va version
421shell variable),
422but
423.Ic bindkey
424can change the key bindings to
425.Xr vi 1
426style bindings en masse.
427.Pp
428The shell always binds the arrow keys (as defined in the
429.Va TERMCAP
430environment variable) to:
431.Pp
432.Bl -tag -width right -compact -offset indent
433.It down
434.Ic down-history
435.It up
436.Ic up-history
437.It left
438.Ic backward-char
439.It right
440.Ic forward-char
441.El
442.Pp
443unless doing so would alter another single-character binding.
444One can set the arrow key escape sequences to the empty string with
445.Va settc
446to prevent these bindings.
447The ANSI/VT100 sequences for arrow keys are always bound.
448.Pp
449Other key bindings are, for the most part, what
450.Xr emacs 1
451and
452.Xr vi 1
453users would expect and can easily be displayed by
454.Ic bindkey ,
455so there
456is no need to list them here.
457Likewise,
458.Ic bindkey
459can list the editor
460commands with a short description of each.
461Certain key bindings have different behavior depending if
462.Xr emacs 1
463or
464.Xr vi 1
465style bindings are being used; see
466.Va vimode
467for more information.
468.Pp
469Note that editor commands do not have the same notion of a
470.Dq word
471as does the shell.
472The editor delimits words with any non-alphanumeric characters not in
473the shell variable
474.Va wordchars ,
475while the shell recognizes only whitespace
476and some of the characters with special meanings to it, listed under
477.Sx Lexical structure .
478.Ss Completion and listing (+)
479The shell is often able to complete words when given a unique abbreviation.
480Type part of a word (for example
481.Ic ls
482.Pa /usr/lost )
483and hit the tab key to run the
484.Ic complete-word
485editor command.
486The shell completes the filename
487.Pa /usr/lost
488to
489.Pa /usr/lost+found/ ,
490replacing the incomplete word with the complete word in the input buffer.
491(Note the terminal
492.Sq / ;
493completion adds a
494.Sq /
495to the end of completed directories and a space to the end of other completed
496words, to speed typing and provide a visual indicator of successful completion.
497The
498.Va addsuffix
499shell variable can be unset to prevent this.)
500If no match is found (perhaps
501.Pa /usr/lost+found
502doesn't exist), the terminal bell rings.
503If the word is already complete (perhaps there is a
504.Pa /usr/lost
505on your
506system, or perhaps you were thinking too far ahead and typed the whole thing)
507a
508.Sq /
509or space is added to the end if it isn't already there.
510.Pp
511Completion works anywhere in the line, not at just the end; completed
512text pushes the rest of the line to the right.
513Completion in the middle of a word
514often results in leftover characters to the right of the cursor that need
515to be deleted.
516.Pp
517Commands and variables can be completed in much the same way.
518For example, typing
519.Sq em[tab]
520would complete
521.Sq em
522to
523.Sq emacs
524if
525.Pa emacs
526were the only command on your system beginning with
527.Sq em .
528Completion can find a command in any directory in
529.Pa path
530or if given a full pathname.
531Typing
532.Sq echo $ar[tab]
533would complete
534.Sq $ar
535to
536.Sq $argv
537if no other variable began with
538.Sq ar .
539.Pp
540The shell parses the input buffer to determine whether the word you want to
541complete should be completed as a filename, command or variable.
542The first word in the buffer and the first word following
543.Sq \&; ,
544.Sq | ,
545.Sq |& ,
546.Sq &&
547or
548.Sq ||
549is considered to be a command.
550A word beginning with
551.Sq $
552is considered to be a variable.
553Anything else is a filename.
554An empty line is
555.Sq completed
556as a filename.
557.Pp
558You can list the possible completions of a word at any time by typing
559.Sq ^D
560to run the
561.Ic delete-char-or-list-or-eof
562editor command.
563The shell lists the possible completions using the
564.Ic ls\-F
565builtin (q.v.)
566and reprints the prompt and unfinished command line, for example:
567.Bd -literal -offset indent
568> ls /usr/l[^D]
569lbin/       lib/        local/      lost+found/
570> ls /usr/l
571.Ed
572.Pp
573If the
574.Va autolist
575shell variable is set, the shell lists the remaining
576choices (if any) whenever completion fails:
577.Bd -literal -offset indent
578> set autolist
579> nm /usr/lib/libt[tab]
580libtermcap.a@ libtermlib.a@
581> nm /usr/lib/libterm
582.Ed
583.Pp
584If
585.Va autolist
586shell variable is set to
587.Sq ambiguous ,
588choices are listed only when
589completion fails and adds no new characters to the word being completed.
590.Pp
591A filename to be completed can contain variables, your own or others' home
592directories abbreviated with
593.Sq ~
594(see
595.Sx Filename substitution )
596and directory stack entries abbreviated with
597.Sq =
598(see
599.Sx Directory stack substitution ) .
600For example,
601.Bd -literal -offset indent
602> ls ~k[^D]
603kahn    kas     kellogg
604> ls ~ke[tab]
605> ls ~kellogg/
606.Ed
607or
608.Bd -literal -offset indent
609> set local = /usr/local
610> ls $lo[tab]
611> ls $local/[^D]
612bin/ etc/ lib/ man/ src/
613> ls $local/
614.Ed
615.Pp
616Note that variables can also be expanded explicitly with the
617.Ic expand-variables
618editor command.
619.Pp
620.Ic delete-char-or-list-or-eof
621lists at only the end of the line;
622in the middle of a line it deletes the character under the cursor and
623on an empty line it logs one out or, if then
624.Va ignoreeof
625variable is set, does nothing.
626.Sq M-^D ,
627bound to the editor command
628.Ic list-choices ,
629lists completion
630possibilities anywhere on a line, and
631.Ic list-choices
632(or any one of the
633related editor commands that do or don't delete, list and/or log out,
634listed under
635.Ic delete-char-or-list-or-eof )
636can be bound to
637.Sq ^D
638with the
639.Ic bindkey
640builtin command if so desired.
641.Pp
642The
643.Ic complete-word-fwd
644and
645.Ic complete-word-back
646editor commands
647(not bound to any keys by default) can be used to cycle up and down through
648the list of possible completions, replacing the current word with the next or
649previous word in the list.
650.Pp
651The shell variable
652.Va fignore
653can be set to a list of suffixes to be ignored by completion.
654Consider the following:
655.Bd -literal -offset indent
656> ls
657Makefile        condiments.h~   main.o          side.c
658README          main.c          meal            side.o
659condiments.h    main.c~
660> set fignore = (.o \e~)
661> emacs ma[^D]
662main.c   main.c~  main.o
663> emacs ma[tab]
664> emacs main.c
665.Ed
666.Pp
667.Sq main.c~
668and
669.Sq main.o
670are ignored by completion (but not listing),
671because they end in suffixes in
672.Va fignore .
673Note that a
674.Sq \e
675was needed in front of
676.Sq ~
677to prevent it from being expanded to
678.Va home
679as described under
680.Sx Filename substitution .
681.Va fignore
682is ignored if only one completion is possible.
683.Pp
684If the
685.Va complete
686shell variable is set to
687.Sq enhance ,
688completion
6891) ignores case and 2) considers periods, hyphens and underscores
690.Sq ( . ,
691.Sq \&-
692and
693.Sq _ )
694to be word separators and hyphens and underscores to be equivalent.
695If you had the following files
696.Bd -literal -offset indent
697comp.lang.c      comp.lang.perl   comp.std.c++
698comp.lang.c++    comp.std.c
699.Ed
700.Pp
701and typed
702.Sq mail \-f c.l.c[tab] ,
703it would be completed to
704.Sq mail \-f comp.lang.c ,
705and
706.Sq ^D
707would list
708.Sq comp.lang.c
709and
710.Sq comp.lang.c++ .
711.Sq mail \-f c..c++[^D]
712would list
713.Sq comp.lang.c++
714and
715.Sq comp.std.c++ .
716Typing
717.Sq rm a\-\-file[^D]
718in the following directory
719.Bd -literal -offset indent
720A_silly_file    a-hyphenated-file    another_silly_file
721.Ed
722.Pp
723would list all three files, because case is ignored and hyphens and
724underscores are equivalent.
725Periods, however, are not equivalent to
726hyphens or underscores.
727.Pp
728If the
729.Va complete
730shell variable is set to
731.Sq enhance ,
732completion
733ignores case and differences between a hyphen and an underscore word
734separator only when the user types a lowercase character or a hyphen.
735Entering an uppercase character or an underscore will not match the
736corresponding lowercase character or hyphen word separator.
737Typing
738.Sq rm a\-\-file[^D]
739in the directory of the previous example would
740still list all three files, but typing
741.Sq rm A\-\-file
742would match only
743.Sq A_silly_file
744and typing
745.Sq rm a__file[^D]
746would match just
747.Sq A_silly_file
748and
749.Sq another_silly_file
750because the user explicitly used an uppercase
751or an underscore character.
752.Pp
753Completion and listing are affected by several other shell variables:
754.Va recexact
755can be set to complete on the shortest possible unique
756match, even if more typing might result in a longer match:
757.Bd -literal -offset indent
758> ls
759fodder   foo      food     foonly
760> set recexact
761> rm fo[tab]
762.Ed
763.Pp
764just beeps, because
765.Sq fo
766could expand to
767.Sq fod
768or
769.Sq foo ,
770but if we type another
771.Sq o ,
772.Bd -literal -offset indent
773> rm foo[tab]
774> rm foo
775.Ed
776.Pp
777the completion completes on
778.Sq foo ,
779even though
780.Sq food
781and
782.Sq foonly
783also match.
784.Va autoexpand
785can be set to run the
786.Ic expand-history
787editor command
788before each completion attempt,
789.Va autocorrect
790can be set to
791spelling-correct the word to be completed (see
792.Sx Spelling correction )
793before each completion attempt and
794.Va correct
795can be set to complete commands automatically after one hits
796.Sq return .
797.Va matchbeep
798can be set to make completion beep or not beep in a variety
799of situations, and
800.Va nobeep
801can be set to never beep at all.
802.Va nostat
803can be set to a list of directories and/or patterns that
804match directories to prevent the completion mechanism from
805.Xr stat 2
806ing
807those directories.
808.Va listmax
809and
810.Va listmaxrows
811can be set to limit the number of items
812and rows (respectively) that are listed without asking first.
813.Va recognize_only_executables
814can be set to make the shell list only
815executables when listing commands, but it is quite slow.
816.Pp
817Finally, the
818.Ic complete
819builtin command can be used to tell the shell how
820to complete words other than filenames, commands and variables.
821Completion and listing do not work on glob-patterns (see
822.Sx Filename substitution ) ,
823but the
824.Ic list-glob
825and
826.Ic expand-glob
827editor commands perform
828equivalent functions for glob-patterns.
829.Ss Spelling correction (+)
830The shell can sometimes correct the spelling of filenames, commands and
831variable names as well as completing and listing them.
832.Pp
833Individual words can be spelling-corrected with the
834.Ic spell-word
835editor command (usually bound to M-s and M-S)
836and the entire input buffer with
837.Ic spell-line
838(usually bound to M-$).
839The
840.Va correct
841shell variable can be set to
842.Dv cmd
843to correct the command name or
844.Dv all
845to correct the entire line each time return is typed, and
846.Va autocorrect
847can be set to correct the word to be completed
848before each completion attempt.
849.Pp
850When spelling correction is invoked in any of these ways and
851the shell thinks that any part of the command line is misspelled,
852it prompts with the corrected line:
853.Bd -literal -offset indent
854> set correct = cmd
855> lz /usr/bin
856CORRECT>ls /usr/bin (y|n|e|a)?
857.Ed
858.Pp
859One can answer
860.Sq y
861or space to execute the corrected line,
862.Sq e
863to leave the uncorrected command in the input buffer,
864.Sq a
865to abort the command as if
866.Sq ^C
867had been hit, and
868anything else to execute the original line unchanged.
869.Pp
870Spelling correction recognizes user-defined completions (see the
871.Ic complete
872builtin command).
873If an input word in a position for
874which a completion is defined resembles a word in the completion list,
875spelling correction registers a misspelling and suggests the latter
876word as a correction.
877However, if the input word does not match any of
878the possible completions for that position, spelling correction does
879not register a misspelling.
880.Pp
881Like completion, spelling correction works anywhere in the line,
882pushing the rest of the line to the right and possibly leaving
883extra characters to the right of the cursor.
884.Ss Editor commands (+)
885.Ic bindkey
886lists key bindings and
887.Ic bindkey \-l
888lists and briefly describes editor commands.
889Only new or especially interesting editor commands are described here.
890See
891.Xr emacs 1
892and
893.Xr vi 1
894for descriptions of each editor's key bindings.
895.Pp
896The character or characters to which each command is bound by default is
897given in parentheses.
898.Sq ^character
899means a control character and
900.Sq M-character
901a meta character, typed as
902.Sq escape-character
903on terminals without a meta key.
904Case counts, but commands that are bound
905to letters by default are bound to both lower- and uppercase letters for
906convenience.
907.Bl -tag -width indent
908.It Ic backward-char Ar (^B, left)
909Move back a character.
910Cursor behavior modified by
911.Va vimode
912.It Ic backward-delete-word Ar (M-^H, M-^?)
913Cut from beginning of current word to cursor \- saved in cut buffer.
914Word boundary behavior modified by
915.Va vimode
916.It Ic backward-word Ar (M-b, M-B)
917Move to beginning of current word.
918Word boundary and cursor behavior modified by
919.Va vimode
920.It Ic beginning-of-line Ar (^A, home)
921Move to beginning of line.
922Cursor behavior modified by
923.Va vimode
924.It Ic capitalize-word Ar (M-c, M-C)
925Capitalize the characters from cursor to end of current word.
926Word boundary behavior modified by
927.Va vimode
928.It Ic complete-word Ar (tab)
929Completes a word as described under
930.Sx Completion and listing
931.It Ic complete-word-back Ar (not bound)
932Like
933.Ic complete-word-fwd ,
934but steps up from the end of the list.
935.It Ic complete-word-fwd Ar (not bound)
936Replaces the current word with the first word in the list of possible
937completions.
938May be repeated to step down through the list.
939At the end of the list, beeps and reverts to the incomplete word.
940.It Ic complete-word-raw Ar (^X-tab)
941Like
942.Ic complete-word ,
943but ignores user-defined completions.
944.It Ic copy-prev-word Ar (M-^_)
945Copies the previous word in the current line into the input buffer.
946See also
947.Ic insert-last-word
948Word boundary behavior modified by
949.Va vimode
950.It Ic dabbrev-expand Ar (M-/)
951Expands the current word to the most recent preceding one for which
952the current is a leading substring, wrapping around the history list
953(once) if necessary.
954Repeating
955.Ic dabbrev-expand
956without any intervening typing
957changes to the next previous word etc., skipping identical matches
958much like
959.Ic history-search-backward
960does.
961.It Ic delete-char Ar (not bound)
962Deletes the character under the cursor.
963See also
964.Ic delete-char-or-list-or-eof
965Cursor behavior modified by
966.Va vimode
967.It Ic delete-char-or-eof Ar (not bound)
968Does
969.Ic delete-char
970if there is a character under the cursor or
971.Ic end-of-file
972on an empty line.
973See also
974.Ic delete-char-or-list-or-eof
975Cursor behavior modified by
976.Va vimode
977.It Ic delete-char-or-list Ar (not bound)
978Does
979.Ic delete-char
980if there is a character under the cursor
981or
982.Ic list-choices
983at the end of the line.
984See also
985.Ic delete-char-or-list-or-eof
986.It Ic delete-char-or-list-or-eof Ar (^D)
987Does
988.Ic delete-char
989if there is a character under the cursor,
990.Ic list-choices
991at the end of the line or
992.Ic end-of-file
993on an empty line.
994See also those three commands, each of which does only a single action, and
995.Ic delete-char-or-eof ,
996.Ic delete-char-or-list
997and
998.Ic list-or-eof ,
999each of which does a different two out of the three.
1000.It Ic delete-word Ar (M-d, M-D)
1001Cut from cursor to end of current word \- save in cut buffer.
1002Word boundary behavior modified by
1003.Va vimode
1004.It Ic down-history Ar (down-arrow, ^N)
1005Like
1006.Ic up-history ,
1007but steps down, stopping at the original input line.
1008.It Ic downcase-word Ar (M-l, M-L)
1009Lowercase the characters from cursor to end of current word.
1010Word boundary behavior modified by
1011.Va vimode
1012.It Ic end-of-file Ar (not bound)
1013Signals an end of file, causing the shell to exit unless the
1014.Va ignoreeof
1015shell variable (q.v.) is set to prevent this.
1016See also
1017.Ic delete-char-or-list-or-eof
1018.It Ic end-of-line Ar (^E, end)
1019Move cursor to end of line.
1020Cursor behavior modified by
1021.Va vimode
1022.It Ic expand-history Ar (M-space)
1023Expands history substitutions in the current word.
1024See
1025.Sx History substitution
1026See also
1027.Ic magic-space ,
1028.Ic toggle-literal-history
1029and the
1030.Va autoexpand
1031shell variable.
1032.It Ic expand-glob Ar (^X-*)
1033Expands the glob-pattern to the left of the cursor.
1034See
1035.Sx Filename substitution
1036.It Ic expand-line Ar (not bound)
1037Like
1038.Ic expand-history ,
1039but expands history substitutions in each word in the input buffer.
1040.It Ic expand-variables Ar (^X-$)
1041Expands the variable to the left of the cursor.
1042See
1043.Sx Variable substitution
1044.It Ic forward-char Ar (^F, right)
1045Move forward one character.
1046Cursor behavior modified by
1047.Va vimode
1048.It Ic forward-word Ar (M-f, M-F)
1049Move forward to end of current word.
1050Word boundary and cursor behavior modified by
1051.Va vimode
1052.It Ic history-search-backward Ar (M-p, M-P)
1053Searches backwards through the history list for a command beginning with
1054the current contents of the input buffer up to the cursor and copies it
1055into the input buffer.
1056The search string may be a glob-pattern (see
1057.Sx Filename substitution )
1058containing
1059.Sq * ,
1060.Sq \&?  ,
1061.Sq []
1062or
1063.Sq {}
1064.Ic up-history
1065and
1066.Ic down-history
1067will proceed from the
1068appropriate point in the history list.
1069Emacs mode only.
1070See also
1071.Ic history-search-forward
1072and
1073.Ic i-search-back
1074.It Ic history-search-forward Ar (M-n, M-N)
1075Like
1076.Ic history-search-backward ,
1077but searches forward.
1078.It Ic i-search-back Ar (not bound)
1079Searches backward like
1080.Ic history-search-backward ,
1081copies the first match
1082into the input buffer with the cursor positioned at the end of the pattern,
1083and prompts with
1084.Sq bck:
1085and the first match.
1086Additional characters may be
1087typed to extend the search,
1088.Ic i-search-back
1089may be typed to continue
1090searching with the same pattern, wrapping around the history list if
1091necessary,
1092.Ic ( i-search-back
1093must be bound to a
1094single character for this to work) or one of the following special characters
1095may be typed:
1096.Pp
1097.Sq ^W
1098Appends the rest of the word under the cursor to the search pattern.
1099delete (or any character bound to
1100.Ic backward-delete-char )
1101Undoes the effect of the last character typed and deletes a character
1102from the search pattern if appropriate.
1103.Sq ^G
1104If the previous search was successful, aborts the entire search.
1105If not, goes back to the last successful search.
1106escape
1107Ends the search, leaving the current line in the input buffer.
1108.Pp
1109Any other character not bound to
1110.Ic self-insert-command
1111terminates the
1112search, leaving the current line in the input buffer, and
1113is then interpreted as normal input.
1114In particular, a carriage return
1115causes the current line to be executed.
1116See also
1117.Ic i-search-fwd
1118and
1119.Ic history-search-backward
1120Word boundary behavior modified by
1121.Va vimode
1122.It Ic i-search-fwd Ar (not bound)
1123Like
1124.Ic i-search-back ,
1125but searches forward.
1126Word boundary behavior modified by
1127.Va vimode
1128.It Ic insert-last-word Ar (M-_)
1129Inserts the last word of the previous input line
1130.Sq ( \&!$ )
1131into the input buffer.
1132See also
1133.Ic copy-prev-word
1134.It Ic list-choices Ar (M-^D)
1135Lists completion possibilities as described under
1136.Sx Completion and listing
1137See also
1138.Ic delete-char-or-list-or-eof
1139and
1140.Ic list-choices-raw
1141.It Ic list-choices-raw Ar (^X-^D)
1142Like
1143.Ic list-choices ,
1144but ignores user-defined completions.
1145.It Ic list-glob Ar (^X-g, ^X-G)
1146Lists (via the
1147.Ic ls\-F
1148builtin) matches to the glob-pattern
1149(see
1150.Sx Filename substitution )
1151to the left of the cursor.
1152.It Ic list-or-eof Ar (not bound)
1153Does
1154.Ic list-choices
1155or
1156.Ic end-of-file
1157on an empty line.
1158See also
1159.Ic delete-char-or-list-or-eof
1160.It Ic magic-space Ar (not bound)
1161Expands history substitutions in the current line,
1162like
1163.Ic expand-history ,
1164and inserts a space.
1165.Ic magic-space
1166is designed to be bound to the space bar,
1167but is not bound by default.
1168.It Ic normalize-command Ar (^X-?)
1169Searches for the current word in PATH and, if it is found, replaces it with
1170the full path to the executable.
1171Special characters are quoted.
1172Aliases are
1173expanded and quoted but commands within aliases are not.
1174This command is
1175useful with commands that take commands as arguments, e.g.,
1176.Sq dbx
1177and
1178.Sq sh \-x
1179.It Ic normalize-path Ar (^X-n, ^X-N)
1180Expands the current word as described under the
1181.Sq expand
1182setting
1183of the
1184.Va symlinks
1185shell variable.
1186.It Ic overwrite-mode Ar (unbound)
1187Toggles between input and overwrite modes.
1188.It Ic run-fg-editor Ar (M-^Z)
1189Saves the current input line and
1190looks for a stopped job where the file name portion of its first word
1191is found in the
1192.Va editors
1193shell variable.
1194If
1195.Va editors
1196is not set, then the file name portion of the
1197.Va EDITOR
1198environment variable
1199.Sq ( ed
1200if unset)
1201and the
1202.Va VISUAL
1203environment variable
1204Sq ( vi
1205if unset)
1206will be used.
1207If such a job is found, it is restarted as if
1208.Sq fg %
1209.Ic job
1210had been typed.
1211This is used to toggle back and forth between an editor and
1212the shell easily.
1213Some people bind this command to
1214.Sq ^Z
1215so they
1216can do this even more easily.
1217.It Ic run-help Ar (M-h, M-H)
1218Searches for documentation on the current command, using the same notion of
1219.Sq current command
1220as the completion routines, and prints it.
1221There is no way
1222to use a pager;
1223.Ic run-help
1224is designed for short help files.
1225If the special alias
1226.Va helpcommand
1227is defined, it is run with the
1228command name as a sole argument.
1229Else,
1230documentation should be in a file named
1231.Sq command.help ,
1232.Sq command.1 ,
1233.Sq command.6 ,
1234.Sq command.8 ,
1235or
1236.Sq command ,
1237which should be in one
1238of the directories listed in the
1239.Va HPATH
1240environment variable.
1241If there is more than one help file only the first is printed.
1242.It Ic self-insert-command Ar (text characters)
1243In insert mode (the default), inserts the typed character into the input line after the character under the cursor.
1244In overwrite mode, replaces the character under the cursor with the typed character.
1245The input mode is normally preserved between lines, but the
1246.Va inputmode
1247shell variable can be set to
1248.Dv insert
1249or
1250.Dv overwrite
1251to put the
1252editor in that mode at the beginning of each line.
1253See also
1254.Ic overwrite-mode
1255.It Ic sequence-lead-in Ar (arrow prefix, meta prefix, ^X)
1256Indicates that the following characters are part of a
1257multi-key sequence.
1258Binding a command to a multi-key sequence really creates
1259two bindings: the first character to
1260.Ic sequence-lead-in
1261and the
1262whole sequence to the command.
1263All sequences beginning with a character
1264bound to
1265.Ic sequence-lead-in
1266are effectively bound to
1267.Ic undefined-key
1268unless bound to another command.
1269.It Ic spell-line Ar (M-$)
1270Attempts to correct the spelling of each word in the input buffer, like
1271.Ic spell-word ,
1272but ignores words whose first character is one of
1273.Sq \- ,
1274.Sq \ ! ,
1275.Sq ^
1276or
1277.Sq % ,
1278or which contain
1279.Sq \e ,
1280.Sq *
1281or
1282.Sq \&? ,
1283to avoid problems with switches, substitutions and the like.
1284See
1285.Sx Spelling correction
1286.It Ic spell-word Ar (M-s, M-S)
1287Attempts to correct the spelling of the current word as described under
1288.Sx Spelling correction
1289Checks each component of a word which appears to be a pathname.
1290.It Ic toggle-literal-history Ar (M-r, M-R)
1291Expands or
1292.Sq unexpands
1293history substitutions in the input buffer.
1294See also
1295.Ic expand-history
1296and the
1297.Va autoexpand
1298shell variable.
1299.It Ic undefined-key Ar (any unbound key)
1300Beeps.
1301.It Ic up-history Ar (up-arrow, ^P)
1302Copies the previous entry in the history list into the input buffer.
1303If
1304.Va histlit
1305is set, uses the literal form of the entry.
1306May be repeated to step up through the history list, stopping at the top.
1307.It Ic upcase-word Ar (M-u, M-U)
1308Uppercase the characters from cursor to end of current word.
1309Word boundary behavior modified by
1310.Va vimode
1311.It Ic vi-beginning-of-next-word Ar (not bound)
1312Vi goto the beginning of next word.
1313Word boundary and cursor behavior modified by
1314.Va vimode
1315.It Ic vi-eword Ar (not bound)
1316Vi move to the end of the current word.
1317Word boundary behavior modified by
1318.Va vimode
1319.It Ic vi-search-back Ar (?)
1320Prompts with
1321.Sq \&?
1322for a search string (which may be a glob-pattern, as with
1323.Ic history-search-backward ),
1324searches for it and copies it into the input buffer.
1325The bell rings if no match is found.
1326Hitting return ends the search and leaves the last match in the input
1327buffer.
1328Hitting escape ends the search and executes the match.
1329.Ic vi
1330mode only.
1331.It Ic vi-search-fwd Ar (/)
1332Like
1333.Ic vi-search-back ,
1334but searches forward.
1335.It Ic which-command Ar (M-?)
1336Does a
1337.Ic which
1338(see the description of the builtin command) on the
1339first word of the input buffer.
1340.It Ic yank-pop Ar (M-y)
1341When executed immediately after a
1342.Ic yank
1343or another
1344.Ic yank-pop ,
1345replaces the yanked string with the next previous string from the
1346killring. This also has the effect of rotating the killring, such that
1347this string will be considered the most recently killed by a later
1348.Ic yank
1349command. Repeating
1350.Ic yank-pop
1351will cycle through the
1352killring any number of times.
1353.El
1354.Ss Lexical structure
1355The shell splits input lines into words at blanks and tabs.
1356The special
1357characters
1358.Sq \&& ,
1359.Sq | ,
1360.Sq \&; ,
1361.Sq < ,
1362.Sq > ,
1363.Sq \&( ,
1364and
1365.Sq \&)
1366and the doubled characters
1367.Sq && ,
1368.Sq || ,
1369.Sq <<
1370and
1371.Sq >>
1372are always separate words, whether or not they are
1373surrounded by whitespace.
1374.Pp
1375When the shell's input is not a terminal, the character
1376.Sq #
1377is taken to begin a
1378comment.
1379Each
1380.Sq #
1381and the rest of the input line on which it appears is
1382discarded before further parsing.
1383.Pp
1384A special character (including a blank or tab) may be prevented from having
1385its special meaning, and possibly made part of another word, by preceding it
1386with a backslash
1387.Sq ( \e )
1388or enclosing it in single
1389.Sq ( \&' ) ,
1390, double
1391.Sq ( \&" )
1392or
1393backward
1394.Sq ( \&` )
1395quotes.
1396When not otherwise quoted a newline preceded by a
1397.Sq \e
1398is equivalent to a blank, but inside quotes this sequence results in a
1399newline.
1400.Pp
1401Furthermore, all
1402.Sx Substitutions
1403(see below) except
1404.Sx History substitution
1405can be prevented by enclosing the strings (or parts of strings)
1406in which they appear with single quotes or by quoting the crucial character(s)
1407(e.g.,
1408.Sq $
1409or
1410.Sq \&`
1411for
1412.Sx Variable substitution
1413or
1414.Sx Command substitution
1415respectively)
1416with
1417.Sq \e
1418.Sx ( Alias substitution
1419is no exception: quoting in any way any
1420character of a word for which an
1421.Va alias
1422has been defined prevents
1423substitution of the alias.
1424The usual way of quoting an alias is to precede it
1425with a backslash.)
1426.Sx History substitution
1427is prevented by
1428backslashes but not by single quotes.
1429Strings quoted with double or backward
1430quotes undergo
1431.Sx Variable substitution
1432and
1433.Sx Command substitution ,
1434but other substitutions are prevented.
1435.Pp
1436Text inside single or double quotes becomes a single word (or part of one).
1437Metacharacters in these strings, including blanks and tabs, do not form
1438separate words.
1439Only in one special case (see
1440.Sx Command substitution
1441below) can a double-quoted string yield parts of more than one word;
1442single-quoted strings never do.
1443Backward quotes are special: they signal
1444.Sx Command substitution
1445(q.v.), which may result in more than one word.
1446.Pp
1447Quoting complex strings, particularly strings which themselves contain quoting
1448characters, can be confusing.
1449Remember that quotes need not be used as they are
1450in human writing!
1451It may be easier to quote not an entire string, but only
1452those parts of the string which need quoting, using different types of quoting
1453to do so if appropriate.
1454.Pp
1455The
1456.Va backslash_quote
1457shell variable (q.v.) can be set to make backslashes
1458always quote
1459.Sq \e ,
1460.Sq \&' ,
1461and
1462.Sq \&"
1463(+) This may make complex quoting tasks
1464easier, but it can cause syntax errors in
1465.Xr csh 1
1466scripts.
1467.Ss Substitutions
1468We now describe the various transformations the shell performs on the input in
1469the order in which they occur.
1470We note in passing the data structures involved
1471and the commands and variables which affect them.
1472Remember that substitutions
1473can be prevented by quoting as described under
1474.Sx Lexical structure .
1475.Ss History substitution
1476Each command, or
1477.Sq event ,
1478input from the terminal is saved in the history list.
1479The previous command is always saved, and the
1480.Va history
1481shell
1482variable can be set to a number to save that many commands.
1483The
1484.Va histdup
1485shell variable can be set to not save duplicate events or consecutive duplicate
1486events.
1487.Pp
1488Saved commands are numbered sequentially from 1 and stamped with the time.
1489It is not usually necessary to use event numbers, but the current event number
1490can be made part of the prompt by placing an
1491.Sq \&!
1492in the
1493.Va prompt
1494shell variable.
1495.Pp
1496The shell actually saves history in expanded and literal (unexpanded) forms.
1497If the
1498.Va histlit
1499shell variable is set, commands that display and store
1500history use the literal form.
1501.Pp
1502The
1503.Va history
1504builtin command can print, store in a file, restore
1505and clear the history list at any time,
1506and the
1507.Va savehist
1508and
1509.Va histfile
1510shell variables can be set to
1511store the history list automatically on logout and restore it on login.
1512.Pp
1513History substitutions introduce words from the history list into the input
1514stream, making it easy to repeat commands, repeat arguments of a previous
1515command in the current command, or fix spelling mistakes in the previous
1516command with little typing and a high degree of confidence.
1517.Pp
1518History substitutions begin with the character
1519.Sq \&!
1520They may begin anywhere in
1521the input stream, but they do not nest.
1522The
1523.Sq \&!
1524may be preceded by a
1525.Sq \e
1526to
1527prevent its special meaning; for convenience, a
1528.Sq \&!
1529is passed unchanged when it
1530is followed by a blank, tab, newline,
1531.Sq =
1532or
1533.Sq \&(
1534History substitutions also
1535occur when an input line begins with
1536.Sq ^
1537This special abbreviation will be
1538described later.
1539The characters used to signal history substitution
1540.Sq ( \&!
1541and
1542.Sq ^ )
1543can be changed by setting the
1544.Va histchars
1545shell variable.
1546Any input
1547line which contains a history substitution is printed before it is executed.
1548.Pp
1549A history substitution may have an
1550.Sq event specification ,
1551which indicates the event from which words are to be taken, a
1552.Sq word designator ,
1553which selects particular words from the chosen event, and/or a
1554.Sq modifier ,
1555which manipulates the selected words.
1556.Pp
1557An event specification can be
1558.Pp
1559.Bl -tag -width XXXX -offset indent -compact
1560.It Ar n
1561A number, referring to a particular event
1562.It Ar \-n
1563An offset, referring to the event
1564.Ar n
1565before the current event
1566.It Ar #
1567The current event.
1568This should be used carefully in
1569.Xr csh 1 ,
1570where there is no check for recursion.
1571.Nm
1572allows 10 levels of recursion.
1573(+)
1574.It Ar \&!
1575The previous event (equivalent to
1576.Sq \-1 )
1577.It Ar s
1578The most recent event whose first word begins with the string
1579.Va s
1580.It Ar ?s?
1581The most recent event which contains the string
1582.Va s
1583The second
1584.Sq \&?
1585can be omitted if it is immediately followed by a newline.
1586.El
1587.Pp
1588For example, consider this bit of someone's history list:
1589.Bd -literal -offset indent
1590 9  8:30    nroff \-man wumpus.man
159110  8:31    cp wumpus.man wumpus.man.old
159211  8:36    vi wumpus.man
159312  8:37    diff wumpus.man.old wumpus.man
1594.Ed
1595.Pp
1596The commands are shown with their event numbers and time stamps.
1597The current event, which we haven't typed in yet, is event 13.
1598.Sq !11
1599and
1600.Sq !\-2
1601refer to event 11.
1602.Sq \&!!
1603refers to the previous event, 12.
1604.Sq \&!!
1605can be abbreviated
1606.Sq \&!
1607if it is
1608followed by
1609.Sq \&:
1610.Sq ( \&:
1611is described below).
1612.Sq !n
1613refers to event 9, which begins with
1614.Sq n
1615.Sq !?old?
1616also refers to event 12, which contains
1617.Sq old
1618Without word designators or modifiers history references simply expand to the
1619entire event, so we might type
1620.Sq !cp
1621to redo the copy command or
1622.Sq !!|more
1623if the
1624.Sq diff
1625output scrolled off the top of the screen.
1626.Pp
1627History references may be insulated from the surrounding text with braces if
1628necessary.
1629For example,
1630.Sq !vdoc
1631would look for a command beginning with
1632.Sq vdoc ,
1633and, in this example, not find one, but
1634.Sq !{v}doc
1635would expand
1636unambiguously to
1637.Sq vi wumpus.mandoc
1638Even in braces, history substitutions do not nest.
1639.Pp
1640(+) While
1641.Xr csh 1
1642expands, for example,
1643.Sq !3d
1644to event 3 with the
1645letter
1646.Sq d
1647appended to it,
1648.Nm
1649expands it to the last event beginning
1650with
1651.Sq 3d ;
1652only completely numeric arguments are treated as event numbers.
1653This makes it possible to recall events beginning with numbers.
1654To expand
1655.Sq !3d
1656as in
1657.Xr csh 1
1658say
1659.Sq !{3}d
1660.Pp
1661To select words from an event we can follow the event specification by a
1662.Sq \&:
1663and a designator for the desired words.
1664The words of an input line are
1665numbered from 0, the first (usually command) word being 0, the second word
1666(first argument) being 1, etc.
1667The basic word designators are:
1668.Bl -tag -width XXXX -offset indent -compact
1669.It Ar 0
1670The first (command) word
1671.It Ar n
1672The
1673.Va n
1674th argument
1675.It Ar ^
1676The first argument, equivalent to
1677.Sq 1
1678.It Ar $
1679The last argument
1680.It Ar %
1681The word matched by an ?
1682.Va s
1683? search
1684.It Ar x\-y
1685A range of words
1686.It Ar \-y
1687Equivalent to
1688.Sq 0\-y
1689.It Ar *
1690Equivalent to
1691.Sq ^\-$ ,
1692but returns nothing if the event contains only 1 word
1693.It Ar x*
1694Equivalent to
1695.Sq x\-$
1696.It Ar x\-
1697Equivalent to
1698.Sq x* ,
1699but omitting the last word
1700.Sq ( $ )
1701.El
1702.Pp
1703Selected words are inserted into the command line separated by single blanks.
1704For example, the
1705.Sq diff
1706command in the previous example might have been
1707typed as
1708.Sq diff !!:1.old !!:1
1709(using
1710.Sq \&:1
1711to select the first argument
1712from the previous event) or
1713.Sq diff !\-2:2 !\-2:1
1714to select and swap the
1715arguments from the
1716.Sq cp
1717command.
1718If we didn't care about the order of the
1719`diff' we might have said
1720.Sq diff !\-2:1\-2
1721or simply
1722.Sq diff !\-2:*
1723The
1724.Sq cp
1725command might have been written
1726.Sq cp wumpus.man !#:1.old
1727, using
1728.Sq #
1729to refer to the current event.
1730`!n:\- hurkle.man' would reuse the first two words from the
1731.Sq nroff
1732command
1733to say
1734.Sq nroff \-man hurkle.man
1735.Pp
1736The
1737.Sq \&:
1738separating the event specification from the word designator can be
1739omitted if the argument selector begins with a
1740.Sq ^ ,
1741.Sq $ ,
1742.Sq * ,
1743.Sq %
1744or
1745.Sq \&-
1746For example, our
1747.Sq diff
1748command might have been
1749.Sq diff !!^.old !!^
1750or,
1751equivalently,
1752.Sq diff !!$.old !!$
1753However, if
1754.Sq \&!!
1755is abbreviated
1756.Sq \&!
1757,
1758an argument selector beginning with
1759.Sq \-
1760will be interpreted as an event
1761specification.
1762.Pp
1763A history reference may have a word designator but no event specification.
1764It then references the previous command.
1765Continuing our
1766.Sq diff
1767example, we could have said simply `diff
1768!^.old !^' or, to get the arguments in the opposite order, just
1769.Sq diff !*
1770.Pp
1771The word or words in a history reference can be edited, or
1772.Sq `modified
1773',
1774by following it with one or more modifiers, each preceded by a
1775.Sq \&: :
1776.Pp
1777.Bl -tag -width XXXXXX -offset indent -compact
1778.It Ar h
1779Remove a trailing pathname component, leaving the head.
1780.It Ar t
1781Remove all leading pathname components, leaving the tail.
1782.It Ar r
1783Remove a filename extension
1784.Sq .xxx ,
1785leaving the root name.
1786.It Ar e
1787Remove all but the extension.
1788.It Ar u
1789Uppercase the first lowercase letter.
1790.It Ar l
1791Lowercase the first uppercase letter.
1792.It Ar s/l/r/
1793Substitute
1794.Ar l
1795for
1796.Ar r
1797.Ar l
1798is simply a string like
1799.Ar r
1800, not a regular expression as in
1801the eponymous
1802.Xr ed 1
1803command.
1804Any character may be used as the delimiter in place of
1805.Sq / ;
1806a
1807.Sq \e
1808can be used to quote the delimiter inside
1809.Va l
1810and
1811.Va r
1812The character
1813.Sq &
1814in the
1815.Va r
1816is replaced by
1817.Va l ;
1818.Sq \e
1819also quotes
1820.Sq &
1821If
1822.Va l
1823is empty (
1824.Dq \& ) ,
1825the
1826.Va l
1827from a previous substitution or the
1828.Va s
1829from a previous search or event number in event specification is used.
1830The trailing delimiter may be omitted if it is immediately followed by a
1831newline.
1832.It Ar \&&
1833Repeat the previous substitution.
1834.It Ar g
1835Apply the following modifier once to each word.
1836.It Ar a (+)
1837Apply the following modifier as many times as possible to a single word.
1838.Sq a
1839and
1840.Sq g
1841can be used together to apply a modifier globally.
1842With the
1843.Sq s
1844modifier, only the patterns contained in the original word are
1845substituted, not patterns that contain any substitution result.
1846.It Ar p
1847Print the new command line but do not execute it.
1848.It Ar q
1849Quote the substituted words, preventing further substitutions.
1850.It Ar x
1851Like
1852.Ar q ,
1853but break into words at blanks, tabs and newlines.
1854.El
1855.Pp
1856Modifiers are applied to only the first modifiable word (unless
1857.Sq g
1858is used).
1859It is an error for no word to be modifiable.
1860.Pp
1861For example, the
1862.Sq diff
1863command might have been written as `diff wumpus.man.old
1864!#^:r', using
1865.Sq \&:r
1866to remove
1867.Sq .old
1868from the first argument on the same line
1869(`!#^').
1870We could say
1871.Sq echo hello out there
1872, then
1873.Sq echo !*:u
1874to capitalize
1875`hello',
1876.Sq echo !*:au
1877to say it out loud, or
1878.Sq echo !*:agu
1879to really shout.
1880We might follow
1881.Sq mail \-s "I forgot my password" rot
1882with
1883.Sq !:s/rot/root
1884to
1885correct the spelling of
1886.Sq root
1887(but see
1888.Sx Spelling correction
1889for a
1890different approach).
1891.Pp
1892There is a special abbreviation for substitutions.
1893.Sq ^ ,
1894when it is the first character on an input line, is equivalent to
1895.Sq !:s^
1896Thus we might have said
1897.Sq ^rot^root
1898to make the spelling correction in the
1899previous example.
1900This is the only history substitution which does not explicitly begin with
1901.Sq \&!
1902.Pp
1903(+) In
1904.Xr csh 1
1905as such, only one modifier may be applied to each history
1906or variable expansion.
1907In
1908.Nm ,
1909more than one may be used, for example
1910.Bd -literal -offset indent
1911% mv wumpus.man /usr/man/man1/wumpus.1
1912% man !$:t:r
1913man wumpus
1914.Ed
1915.Pp
1916In
1917.Xr csh 1 ,
1918the result would be
1919.Sq wumpus.1:r
1920A substitution followed by a
1921colon may need to be insulated from it with braces:
1922.Bd -literal -offset indent
1923> mv a.out /usr/games/wumpus
1924> setenv PATH !$:h:$PATH
1925Bad ! modifier: $.
1926> setenv PATH !{\-2$:h}:$PATH
1927setenv PATH /usr/games:/bin:/usr/bin:.
1928.Ed
1929.Pp
1930The first attempt would succeed in
1931.Xr csh 1
1932but fails in
1933.Nm ,
1934because
1935.Nm
1936expects another modifier after the second colon
1937rather than
1938.Sq $
1939.Pp
1940Finally, history can be accessed through the editor as well as through
1941the substitutions just described.
1942The
1943.Ic up-
1944and
1945.Ic down-history ,
1946.Ic history-search-backward
1947and
1948.Va -forward ,
1949.Ic i-search-back
1950and
1951.Ic -fwd ,
1952.Ic vi-search-back
1953and
1954.Ic -fwd ,
1955.Ic copy-prev-word
1956and
1957.Ic insert-last-word
1958editor commands search for
1959events in the history list and copy them into the input buffer.
1960The
1961.Ic toggle-literal-history
1962editor command switches between the
1963expanded and literal forms of history lines in the input buffer.
1964.Ic expand-history
1965and
1966.Ic expand-line
1967expand history substitutions
1968in the current word and in the entire input buffer respectively.
1969.Ss Alias substitution
1970The shell maintains a list of aliases which can be set, unset and printed by
1971the
1972.Ic alias
1973and
1974.Ic unalias
1975commands.
1976After a command line is parsed
1977into simple commands (see
1978.Sx Commands )
1979the first word of each command,
1980left-to-right, is checked to see if it has an alias.
1981If so, the first word is
1982replaced by the alias.
1983If the alias contains a history reference, it undergoes
1984.Va History substitution
1985(q.v.) as though the original command were the
1986previous input line.
1987If the alias does not contain a history reference, the
1988argument list is left untouched.
1989.Pp
1990Thus if the alias for
1991.Sq ls
1992were
1993.Sq ls \-l
1994the command
1995.Sq ls /usr
1996would become `ls
1997\-l /usr', the argument list here being undisturbed.
1998If the alias for
1999.Sq lookup
2000were
2001.Sq grep !/etc/passwd
2002then
2003.Sq lookup bill
2004would become `grep bill
2005/etc/passwd'.
2006Aliases can be used to introduce parser metasyntax.
2007For
2008example,
2009.Sq alias print
2010pr \e!* | lpr'' defines a
2011.Sq `command
2012' (`print') which
2013.Va pr
2014(1)s its arguments to the line printer.
2015.Pp
2016Alias substitution is repeated until the first word of the command has no
2017alias.
2018If an alias substitution does not change the first word (as in the
2019previous example) it is flagged to prevent a loop.
2020Other loops are detected and
2021cause an error.
2022.Pp
2023Some aliases are referred to by the shell; see
2024.Va Special aliases
2025.Sx Variable substitution
2026The shell maintains a list of variables, each of which has as value a list of
2027zero or more words.
2028The values of shell variables can be displayed and changed with the
2029.Va set
2030and
2031.Va unset
2032commands.
2033The system maintains its own list of
2034.Sq `environment
2035' variables.
2036These can be displayed and changed with
2037.Va printenv
2038,
2039.Va setenv
2040and
2041.Va unsetenv
2042.Pp
2043(+) Variables may be made read-only with
2044.Sq set \-r
2045(q.v.).
2046Read-only variables may not be modified or unset;
2047attempting to do so will cause an error.
2048Once made read-only, a variable cannot be made writable,
2049so
2050.Sq set \-r
2051should be used with caution.
2052Environment variables cannot be made read-only.
2053.Pp
2054Some variables are set by the shell or referred to by it.
2055For instance, the
2056.Va argv
2057variable is an image of the shell's argument
2058list, and words of this variable's value are referred to in special ways.
2059Some of the variables referred to by the shell are toggles;
2060the shell does not care what their value is, only whether they are set or not.
2061For instance, the
2062.Va verbose
2063variable is a toggle which causes command
2064input to be echoed.
2065The
2066.Fl v\fR command line option sets this variable.
2067.Va Special shell variables
2068lists all variables which are referred to by the shell.
2069.Pp
2070Other operations treat variables numerically.
2071The
2072.Sq @
2073command permits numeric
2074calculations to be performed and the result assigned to a variable.
2075Variable
2076values are, however, always represented as (zero or more) strings.
2077For the
2078purposes of numeric operations, the null string is considered to be zero, and
2079the second and subsequent words of multi-word values are ignored.
2080.Pp
2081After the input line is aliased and parsed, and before each command is
2082executed, variable substitution is performed keyed by
2083.Sq $
2084characters.
2085This
2086expansion can be prevented by preceding the
2087.Sq $
2088with a
2089.Sq \e
2090except within
2091.Sq "
2092s
2093where it
2094.Va always
2095occurs, and within
2096.Sq
2097's where it
2098.Va never
2099occurs.
2100Strings quoted by
2101.Sq \`
2102are interpreted later (see
2103.Sx Command substitution
2104below) so
2105.Sq $
2106substitution does not occur there until later,
2107if at all.
2108A
2109.Sq $
2110is passed unchanged if followed by a blank, tab, or
2111end-of-line.
2112.Pp
2113Input/output redirections are recognized before variable expansion, and are
2114variable expanded separately.
2115Otherwise, the command name and entire argument
2116list are expanded together.
2117It is thus possible for the first (command) word
2118(to this point) to generate more than one word, the first of which becomes the
2119command name, and the rest of which become arguments.
2120.Pp
2121Unless enclosed in
2122.Sq "
2123or given the
2124.Sq \&:q
2125modifier the results of variable
2126substitution may eventually be command and filename substituted.
2127Within
2128.Sq "
2129, a
2130variable whose value consists of multiple words expands to a (portion of a)
2131single word, with the words of the variable's value separated by blanks.
2132When
2133the
2134.Sq \&:q
2135modifier is applied to a substitution the variable will expand to
2136multiple words with each word separated by a blank and quoted to prevent later
2137command or filename substitution.
2138.Pp
2139The following metasequences are provided for introducing variable values into
2140the shell input.
2141Except as noted, it is an error to reference a variable which
2142is not set.
2143.Pp
2144.Bl -tag -width XXXXXXXXXX -offset indent -compact
2145.PD 0
2146.It Ar $name
2147.It Ar ${name}
2148Substitutes the words of the value of variable
2149.Va name ,
2150each separated
2151by a blank.
2152Braces insulate
2153.Va name
2154from following characters which would
2155otherwise be part of it.
2156Shell variables have names consisting of
2157letters and digits starting with a letter.
2158The underscore character is
2159considered a letter.
2160If
2161.Va name
2162is not a shell variable, but is set in the
2163environment, then that value is returned (but some of the other forms
2164given below are not available in this case).
2165.It Ar $name[selector]
2166.It Ar ${name[selector]}
2167Substitutes only the selected words from the value of
2168.Va name
2169The
2170.Va selector
2171is subjected to
2172.Sq $
2173substitution and may consist of
2174a single number or two numbers separated by a
2175.Sq \&-
2176The first word of a variable's value is numbered
2177.Sq 1
2178If the first number of a range is omitted it defaults to
2179.Sq 1
2180If the last member of a range is omitted it defaults to
2181.Sq $#
2182.Va name
2183The
2184.Va selector
2185.Sq *
2186selects all words.
2187It is not an error for a range to be empty if the
2188second argument is omitted or in range.
2189.It Ar $0
2190Substitutes the name of the file from which command input
2191is being read.
2192An error occurs if the name is not known.
2193.It Ar $number
2194.It Ar ${number}
2195Equivalent to
2196.Sq $argv[number]
2197.It Ar $*
2198Equivalent to
2199.Sq $argv ,
2200which is equivalent to
2201.Sq $argv[*]
2202.El
2203.Pp
2204The
2205.Sq \&:
2206modifiers described under
2207.Sx History substitution ,
2208except for
2209.Sq \&:p ,
2210can be applied to the substitutions above.
2211More than one may be used.
2212(+)
2213Braces may be needed to insulate a variable substitution from a literal colon
2214just as with
2215.Sx History substitution
2216(q.v.); any modifiers must appear
2217within the braces.
2218.Pp
2219The following substitutions can not be modified with
2220.Sq \&:
2221modifiers.
2222.Pp
2223.Bl -tag -width XXXXXXXX -offset indent -compact
2224.It Ar $?name
2225.It Ar ${?name}
2226Substitutes the string
2227.Sq 1
2228if
2229.Va name
2230is set,
2231.Sq 0
2232if it is not.
2233.It Ar $?0
2234Substitutes
2235.Sq 1
2236if the current input filename is known,
2237.Sq 0
2238if it is not.
2239Always
2240.Sq 0
2241in interactive shells.
2242.It Ar
2243$#name
2244${#name}
2245Substitutes the number of words in
2246.Va name
2247.It Ar
2248$#
2249Equivalent to
2250.Sq $#argv
2251(+)
2252.It Ar
2253$%
2254.Va name
2255.It Ar ${%name}
2256Substitutes the number of characters in
2257.Va name
2258(+)
2259.Pp
2260$%
2261.Va number
2262.TP 8
2263.It Ar ${%number}
2264Substitutes the number of characters in
2265.Va $argv[number] .
2266(+)
2267.It Ar $?
2268Equivalent to
2269.Sq $status
2270(+)
2271.It Ar $$
2272Substitutes the (decimal) process number of the (parent) shell.
2273.It Ar $!
2274Substitutes the (decimal) process number of the last
2275background process started by this shell.
2276(+)
2277.It Ar $_
2278Substitutes the command line of the last command executed.
2279(+)
2280.It Ar $<
2281Substitutes a line from the standard input, with no further interpretation
2282thereafter.
2283It can be used to read from the keyboard in a shell script.
2284(+) While
2285.Xr csh 1
2286always quotes $<, as if it were equivalent to
2287.Sq $<:q ,
2288.Nm
2289does not.
2290Furthermore, when
2291.Nm
2292is waiting for a line to be
2293typed the user may type an interrupt to interrupt the sequence into
2294which the line is to be substituted, but
2295.Xr csh 1
2296does not allow this.
2297.El
2298.Pp
2299The editor command
2300.Va expand-variables
2301, normally bound to
2302.Sq ^X-$ ,
2303can be used to interactively expand individual variables.
2304.Ss "Command, filename and directory stack substitution"
2305The remaining substitutions are applied selectively to the arguments
2306of builtin commands.
2307This means that portions of expressions which are not evaluated are
2308not subjected to these expansions.
2309For commands which are not internal to the
2310shell, the command name is substituted separately from the argument list.
2311This occurs very late, after input-output redirection is performed, andk
2312in a child of the main shell.
2313.Ss "Command substitution"
2314Command substitution is indicated by a command enclosed in
2315.Sq \&`
2316The output
2317from such a command is broken into separate words at blanks, tabs and newlines,
2318and null words are discarded.
2319The output is variable and command substituted
2320and put in place of the original string.
2321.Pp
2322Command substitutions inside double
2323quotes
2324.Sq ( \&" )
2325retain blanks and tabs; only newlines force new words.
2326The single
2327final newline does not force a new word in any case.
2328It is thus possible for a
2329command substitution to yield only part of a word, even if the command outputs
2330a complete line.
2331.Pp
2332By default, the shell since version 6.12 replaces all newline and carriage
2333return characters in the command by spaces.
2334If this is switched off by
2335unsetting
2336.Va csubstnonl ,
2337newlines separate commands as usual.
2338.Ss "Filename substitution"
2339If a word contains any of the characters
2340.Sq * ,
2341.Sq \&? ,
2342.Sq \&[
2343or
2344.Sq {
2345or begins with
2346the character
2347.Sq ~
2348it is a candidate for filename substitution, also known as
2349.Dq globbing .
2350This word is then regarded as a pattern
2351.Dq ( glob-pattern ) ,
2352and
2353replaced with an alphabetically sorted list of file names which match the
2354pattern.
2355.Pp
2356In matching filenames, the character
2357.Sq .
2358at the beginning of a filename or
2359immediately following a
2360.Sq / ,
2361as well as the character
2362.Sq /
2363must be matched
2364explicitly (unless either
2365.Va globdot
2366or
2367.Va globstar
2368or both are set(+)).
2369The character
2370.Sq *
2371matches any string of characters,
2372including the null string.
2373The character
2374.Sq \&?
2375matches any single character.
2376The sequence
2377.Sq [...]
2378matches any one of the characters enclosed.
2379Within
2380.Sq [...]
2381, a pair of
2382characters separated by
2383.Sq \&-
2384matches any character lexically between the two.
2385.Pp
2386(+) Some glob-patterns can be negated:
2387The sequence
2388.Sq [^...]
2389matches any single character
2390.Va not
2391specified by the
2392characters and/or ranges of characters in the braces.
2393.Pp
2394An entire glob-pattern can also be negated with
2395.Sq ^ :
2396.Bd -literal -offset indent
2397> echo *
2398bang crash crunch ouch
2399> echo ^cr*
2400bang ouch
2401.Ed
2402.Pp
2403Glob-patterns which do not use
2404.Sq \&? ,
2405.Sq * , or
2406.Sq []
2407or which use
2408.Sq {}
2409or
2410.Sq ~
2411(below) are not negated correctly.
2412.Pp
2413The metanotation
2414.Sq a{b,c,d}e
2415is a shorthand for
2416.Sq abe ace ade
2417Left-to-right order is preserved:
2418.Sq /usr/source/s1/{oldls,ls}.c
2419expands
2420to
2421.Sq /usr/source/s1/oldls.c /usr/source/s1/ls.c
2422The results of matches are
2423sorted separately at a low level to preserve this order:
2424.Sq ../{memo,*box}
2425might expand to
2426.Sq ../memo ../box ../mbox
2427(Note that
2428.Sq memo
2429was not sorted with the results of matching
2430.Sq *box . )
2431It is not an error when this construct expands to files which do not exist,
2432but it is possible to get an error from a command to which the expanded list
2433is passed.
2434This construct may be nested.
2435As a special case the words
2436.Sq { ,
2437.Sq }
2438and
2439.Sq {}
2440are passed undisturbed.
2441.Pp
2442The character
2443.Sq ~
2444at the beginning of a filename refers to home directories.
2445Standing alone, i.e.,
2446.Sq ~ ,
2447it expands to the invoker's home directory as
2448reflected in the value of the
2449.Va home
2450shell variable.
2451When followed by a
2452name consisting of letters, digits and
2453.Sq \&-
2454characters the shell searches for a
2455user with that name and substitutes their home directory; thus
2456.Sq ~ken
2457might
2458expand to
2459.Sq /usr/ken
2460and
2461.Sq ~ken/chmach
2462to
2463.Sq /usr/ken/chmach
2464If the character
2465.Sq ~
2466is followed by a character other than a letter or
2467.Sq /
2468or appears elsewhere
2469than at the beginning of a word, it is left undisturbed.
2470A command like
2471.Sq setenv MANPATH /usr/man:/usr/local/man:~/lib/man
2472does not,
2473therefore, do home directory substitution as one might hope.
2474.Pp
2475It is an error for a glob-pattern containing
2476.Sq * ,
2477.Sq \&?  ,
2478.Sq \&[
2479or
2480.Sq ~ ,
2481with or
2482without
2483.Sq ^ ,
2484not to match any files.
2485However, only one pattern in a list of
2486glob-patterns must match a file (so that, e.g.,
2487.Sq rm *.a *.c *.o
2488would fail
2489only if there were no files in the current directory ending in
2490.Sq .a ,
2491.Sq .c ,
2492or
2493.Sq .o ) ,
2494and if the
2495.Va nonomatch
2496shell variable is set a pattern (or list
2497of patterns) which matches nothing is left unchanged rather than causing
2498an error.
2499.Pp
2500The
2501.Va globstar
2502shell variable can be set to allow
2503.Sq **
2504or
2505.Sq ***
2506as
2507a file glob pattern that matches any string of characters including
2508.Sq / ,
2509recursively traversing any existing sub-directories.
2510For example,
2511.Sq ls **.c
2512will list all the .c files in the current directory tree.
2513If used by itself, it will match zero or more sub-directories
2514(e.g.
2515.Sq ls /usr/include/**/time.h
2516will list any file named
2517.Sq time.h
2518in the /usr/include directory tree;
2519.Sq ls /usr/include/**time.h
2520will match
2521any file in the /usr/include directory tree ending in
2522.Sq time.h ;
2523and
2524.Sq ls /usr/include/**time**.h
2525will match any .h file with
2526.Sq time
2527either
2528in a subdirectory name or in the filename itself).
2529To prevent problems with recursion, the
2530.Sq **
2531glob-pattern will not
2532descend into a symbolic link containing a directory.
2533To override this,
2534use
2535.Sq ***
2536(+)
2537.Pp
2538The
2539.Va noglob
2540shell variable can be set to prevent filename substitution,
2541and the
2542.Va expand-glob
2543editor command, normally bound to
2544.Sq ^X-* ,
2545can be
2546used to interactively expand individual filename substitutions.
2547.Ss "Directory stack substitution (+)"
2548The directory stack is a list of directories, numbered from zero, used by the
2549.Va pushd ,
2550.Va popd
2551and
2552.Va dirs
2553builtin commands (q.v.).
2554.Va dirs
2555can print, store in a file, restore and clear the directory stack
2556at any time, and the
2557.Va savedirs
2558and
2559.Va dirsfile
2560shell variables can be set to
2561store the directory stack automatically on logout and restore it on login.
2562The
2563.Va dirstack
2564shell variable can be examined to see the directory stack and
2565set to put arbitrary directories into the directory stack.
2566.Pp
2567The character
2568.Sq =
2569followed by one or more digits expands to an entry in
2570the directory stack.
2571The special case
2572.Sq =-
2573expands to the last directory in
2574the stack.
2575For example,
2576.Bd -literal -offset indent
2577> dirs \&-v
25780       /usr/bin
25791       /usr/spool/uucp
25802       /usr/accts/sys
2581> echo =1
2582/usr/spool/uucp
2583> echo =0/calendar
2584/usr/bin/calendar
2585> echo =\-
2586/usr/accts/sys
2587.Ed
2588.Pp
2589The
2590.Va noglob
2591and
2592.Va nonomatch
2593shell variables and the
2594.Va expand-glob
2595editor command apply to directory stack as well as filename substitutions.
2596.Ss "Other substitutions (+)"
2597There are several more transformations involving filenames, not strictly
2598related to the above but mentioned here for completeness.
2599.Va Any
2600filename may be expanded to a full path when the
2601.Va symlinks
2602variable (q.v.) is set to
2603.Sq expand
2604Quoting prevents this expansion, and
2605the
2606.Va normalize-path
2607editor command does it on demand.
2608The
2609.Va normalize-command
2610editor command expands commands in PATH into
2611full paths on demand.
2612Finally,
2613.Va cd
2614and
2615.Va pushd
2616interpret
2617.Sq \&-
2618as the old working directory
2619(equivalent to the shell variable
2620.Va owd ) .
2621This is not a substitution at all, but an abbreviation recognized by only
2622those commands.
2623Nonetheless, it too can be prevented by quoting.
2624.Ss "Commands"
2625The next three sections describe how the shell executes commands and
2626deals with their input and output.
2627.Ss "Simple commands, pipelines and sequences"
2628A simple command is a sequence of words, the first of which specifies the
2629command to be executed.
2630A series of simple commands joined by
2631.Sq |
2632characters
2633forms a pipeline.
2634The output of each command in a pipeline is connected to the
2635input of the next.
2636.Pp
2637Simple commands and pipelines may be joined into sequences with
2638.Sq ; ,
2639and will
2640be executed sequentially.
2641Commands and pipelines can also be joined into
2642sequences with
2643.Sq ||
2644or
2645.Sq && ,
2646indicating, as in the C language, that the second
2647is to be executed only if the first fails or succeeds respectively.
2648.Pp
2649A simple command, pipeline or sequence may be placed in parentheses,
2650.Sq () ,
2651to form a simple command, which may in turn be a component of a pipeline or
2652sequence.
2653A command, pipeline or sequence can be executed
2654without waiting for it to terminate by following it with an
2655.Sq \&& .
2656.Ss "Builtin and non-builtin command execution"
2657Builtin commands are executed within the shell.
2658If any component of a
2659pipeline except the last is a builtin command, the pipeline is executed
2660in a subshell.
2661.Pp
2662Parenthesized commands are always executed in a subshell.
2663.Bd -literal -offset indent
2664(cd; pwd); pwd
2665.Ed
2666.Pp
2667thus prints the
2668.Va home
2669directory, leaving you where you were
2670(printing this after the home directory), while
2671.Bd -literal -offset indent
2672cd; pwd
2673.Ed
2674.Pp
2675leaves you in the
2676.Va home
2677directory.
2678Parenthesized commands are most often
2679used to prevent
2680.Va cd
2681from affecting the current shell.
2682.Pp
2683When a command to be executed is found not to be a builtin command the shell
2684attempts to execute the command via
2685.Xr execve 2 .
2686Each word in the variable
2687.Va path
2688names a directory in which the shell will look for the
2689command.
2690If the shell is not given a
2691.Fl f
2692option, the shell
2693hashes the names in these directories into an internal table so that it will
2694try an
2695.Xr execve 2
2696in only a directory where there is a possibility that the
2697command resides there.
2698This greatly speeds command location when a large
2699number of directories are present in the search path. This hashing mechanism is
2700not used:
2701.TP 4
2702.Bl -enum -width indent
2703.It
2704If hashing is turned explicitly off via
2705.Va unhash
2706.It
2707If the shell was given a
2708.Fl f Ar argument
2709.It
2710For each directory component of
2711.Va path
2712which does not begin with a
2713.Sq /
2714.It
2715If the command contains a
2716.Sq /
2717.El
2718.Pp
2719In the above four cases the shell concatenates each component of the path
2720vector with the given command name to form a path name of a file which it
2721then attempts to execute it. If execution is successful, the search stops.
2722.Pp
2723If the file has execute permissions but is not an executable to the system
2724(i.e., it is neither an executable binary nor a script that specifies its
2725interpreter), then it is assumed to be a file containing shell commands and
2726a new shell is spawned to read it.
2727The
2728.Va shell
2729special alias may be set
2730to specify an interpreter other than the shell itself.
2731.Pp
2732On systems which do not understand the
2733.Sq #!
2734script interpreter convention
2735the shell may be compiled to emulate it; see the
2736.Va version
2737shell
2738variable.
2739If so, the shell checks the first line of the file to
2740see if it is of the form
2741.Sq #!interpreter arg ...
2742If it is,
2743the shell starts
2744.Va interpreter
2745with the given
2746.Va arg
2747s and feeds the
2748file to it on standard input.
2749.Ss "Input/output"
2750The standard input and standard output of a command may be redirected with the
2751following syntax:
2752.Pp
2753.Bl -tag -width XXXXXX -offset indent -compact
2754.It Ar < name
2755Open file
2756.Va name
2757(which is first variable, command and filename
2758expanded) as the standard input.
2759.It Ar << word
2760Read the shell input up to a line which is identical to
2761.Va word .
2762.Va word
2763is not subjected to variable, filename or command substitution, and each input
2764line is compared to
2765.Va word
2766before any substitutions are done on this input
2767line.
2768Unless a quoting
2769.Sq \e ,
2770.Sq \&"
2771,
2772.Sq \&'
2773or
2774.Sq \&`
2775appears in
2776.Va word
2777variable and
2778command substitution is performed on the intervening lines, allowing
2779.Sq \e
2780to
2781quote
2782.Sq $ ,
2783.Sq \e
2784and
2785.Sq \&` .
2786Commands which are substituted have all blanks, tabs,
2787and newlines preserved, except for the final newline which is dropped.
2788The
2789resultant text is placed in an anonymous temporary file which is given to the
2790command as standard input.
2791.Pp
2792.It Ar > name
2793.It Ar >! name
2794.It Ar >& name
2795.It Ar >&! name
2796The file
2797.Va name
2798is used as standard output.
2799If the file does not exist
2800then it is created; if the file exists, it is truncated, its previous contents
2801being lost.
2802.Pp
2803If the shell variable
2804.Va noclobber
2805is set, then the file must not exist or be a
2806character special file (e.g., a terminal or
2807.Sq /dev/null )
2808or an error results.
2809This helps prevent accidental destruction of files.
2810In this case the
2811.Sq \&!
2812forms
2813can be used to suppress this check.
2814If
2815.Va notempty
2816is given in
2817.Va noclobber ,
2818.Sq >
2819is allowed on empty files;
2820if
2821.Va ask
2822is set, an interacive confirmation is presented, rather than an
2823error.
2824.Pp
2825The forms involving
2826.Sq \&&
2827route the diagnostic output into the specified file as
2828well as the standard output.
2829.Va name
2830is expanded in the same way as
2831.Sq <
2832input filenames are.
2833.Pp
2834.It Ar >> name
2835.It Ar >>& name
2836.It Ar >>! name
2837.It Ar >>&! name
2838Like
2839.Sq >
2840, but appends output to the end of
2841.Va name
2842If the shell variable
2843.Va noclobber
2844is set, then it is an error for
2845the file
2846.Va not
2847to exist, unless one of the
2848.Sq \&!
2849forms is given.
2850.El
2851.Pp
2852A command receives the environment in which the shell was invoked as modified
2853by the input-output parameters and the presence of the command in a pipeline.
2854Thus, unlike some previous shells, commands run from a file of shell commands
2855have no access to the text of the commands by default; rather they receive the
2856original standard input of the shell.
2857The
2858.Sq <<
2859mechanism should be used to
2860present inline data.
2861This permits shell command scripts to function as
2862components of pipelines and allows the shell to block read its input.
2863Note
2864that the default standard input for a command run detached is
2865.Va not
2866the empty file
2867.Va /dev/null ,
2868but the original standard input of the shell.
2869If this is a terminal and if the process attempts to read from the terminal,
2870then the process will block and the user will be notified (see
2871.Sx Jobs ) .
2872.Pp
2873Diagnostic output may be directed through a pipe with the standard output.
2874Simply use the form
2875.Sq |&
2876rather than just
2877.Sq | .
2878.Pp
2879The shell cannot presently redirect diagnostic output without also redirecting
2880standard output, but
2881.Sq \&( command > output-file ) >&  error-file
2882is often an acceptable workaround.
2883Either
2884.Va output-file
2885or
2886.Va error-file
2887may be
2888.Sq /dev/tty
2889to send output to the terminal.
2890.Ss "Features"
2891Having described how the shell accepts, parses and executes
2892command lines, we now turn to a variety of its useful features.
2893.Ss "Control flow"
2894The shell contains a number of commands which can be used to regulate the
2895flow of control in command files (shell scripts) and (in limited but
2896useful ways) from terminal input.
2897These commands all operate by forcing the
2898shell to reread or skip in its input and, due to the implementation,
2899restrict the placement of some of the commands.
2900.Pp
2901The
2902.Va foreach ,
2903.Va switch ,
2904and
2905.Va while
2906statements, as well as the
2907.Va if-then-else
2908form of the
2909.Va if
2910statement, require that the major
2911keywords appear in a single simple command on an input line as shown below.
2912.Pp
2913If the shell's input is not seekable, the shell buffers up input whenever
2914a loop is being read and performs seeks in this internal buffer to
2915accomplish the rereading implied by the loop.
2916(To the extent that this allows, backward
2917.Va goto
2918s will succeed on non-seekable inputs.)
2919.Ss "Expressions"
2920The
2921.Va if ,
2922.Va while
2923and
2924.Va exit
2925builtin commands
2926use expressions with a common syntax.
2927The expressions can include any
2928of the operators described in the next three sections.
2929Note that the
2930.Va @
2931builtin command (q.v.) has its own separate syntax.
2932.Ss "Logical, arithmetical and comparison operators"
2933These operators are similar to those of C and have the same precedence.
2934They include
2935.IP "" 4
2936.Bl -tag -width XXXXXX -offset indent -compact
2937.It ||  &&  |   &  ==  !=  =~  !~  <=  >=
2938.It <  > <<  >>  +  \-  *  /  %  !  ~  (  )
2939.El
2940.Pp
2941Here the precedence increases to the right,
2942.Sq ==
2943.Sq \&!=
2944.Sq =~
2945and
2946.Sq \&!~ ,
2947.Sq <=
2948.Sq >=
2949.Sq <
2950and
2951.Sq > ,
2952.Sq <<
2953.Sq >> ,
2954.Sq +
2955and
2956.Sq \&- ,
2957.Sq *
2958.Sq /
2959and
2960.Sq %
2961being, in
2962groups, at the same level.
2963The
2964.Sq ==
2965.Sq \&!=
2966.Sq =~
2967and
2968.Sq \&!~
2969operators compare
2970their arguments as strings; all others operate on numbers.
2971The operators
2972.Sq =~
2973and
2974.Sq \&!~
2975are like
2976.Sq \&!=
2977and
2978.Sq ==
2979except that the right hand side is a
2980glob-pattern (see
2981.Sx Filename substitution )
2982against which the left hand operand is matched.
2983This reduces the need for use of the
2984.Va switch
2985builtin command in shell scripts when all that is really needed is
2986pattern matching.
2987.Pp
2988Null or
2989missing arguments are considered
2990.Sq 0
2991The results of all expressions are
2992strings, which represent decimal numbers.
2993It is important to note that
2994no two components of an expression can appear in the same word; except
2995when adjacent to components of expressions which are syntactically
2996significant to the parser
2997.Sq ( \&&
2998.Sq |
2999.Sq <
3000.Sq >
3001.Sq \&(
3002.Sq \&) )
3003they should be
3004surrounded by spaces.
3005.Ss "Command exit status"
3006Commands can be executed in expressions and their exit status
3007returned by enclosing them in braces
3008.Sq ( {} ) .
3009Remember that the braces should
3010be separated from the words of the command by spaces.
3011Command executions
3012succeed, returning true, i.e.,
3013.Sq 1 ,
3014if the command exits with status 0,
3015otherwise they fail, returning false, i.e.,
3016.Sq 0 .
3017If more detailed status
3018information is required then the command should be executed outside of an
3019expression and the
3020.Va status
3021shell variable examined.
3022.Ss "File inquiry operators"
3023Some of these operators perform true/false tests on files and related
3024objects.
3025They are of the form
3026.Fl
3027.Va op file
3028, where
3029.Va op
3030is one of
3031.Bl -tag -width XXX -offset indent -compact
3032.It Ar r
3033Read access
3034.It Ar w
3035Write access
3036.It Ar x
3037Execute access
3038.It Ar X
3039Executable in the path or shell builtin, e.g.,
3040.Sq \&-X ls
3041and
3042.Sq \&-X ls\&-F
3043are
3044generally true, but
3045.Sq \&-X /bin/ls
3046is not (+)
3047.It Ar e
3048Existence
3049.It Ar o
3050Ownership
3051.It Ar z
3052Zero size
3053.It Ar s
3054Non-zero size (+)
3055.It Ar f
3056Plain file
3057.It Ar d
3058Directory
3059.It Ar l
3060Symbolic link (+) *
3061.It Ar b
3062Block special file (+)
3063.It Ar c
3064Character special file (+)
3065.It Ar p
3066Named pipe (fifo) (+) *
3067.It Ar S
3068Socket special file (+) *
3069.It Ar u
3070Set-user-ID bit is set (+)
3071.It Ar g
3072Set-group-ID bit is set (+)
3073.It Ar k
3074Sticky bit is set (+)
3075.It Ar t file
3076(which must be a digit) is an open file descriptor
3077for a terminal device (+)
3078.It Ar R
3079Has been migrated (Convex only) (+)
3080.It Ar L
3081Applies subsequent operators in a multiple-operator test to a symbolic link
3082rather than to the file to which the link points (+) *
3083.El
3084.Pp
3085.Va file
3086is command and filename expanded and then tested to
3087see if it has the specified relationship to the real user.
3088If
3089.Va file
3090does not exist or is inaccessible or, for the operators indicated by
3091.Sq * ,
3092if the specified file type does not exist on the current system,
3093then all inquiries return false, i.e.,
3094.Sq 0 .
3095.Pp
3096These operators may be combined for conciseness:
3097.Sq \&-
3098.Va xy file
3099is
3100equivalent to
3101.Sq \&-x file && \&-y file .
3102(+) For example,
3103.Sq \&-fx
3104is true
3105(returns
3106.Sq 1 )
3107for plain executable files, but not for directories.
3108.Pp
3109.Va L
3110may be used in a multiple-operator test to apply subsequent operators
3111to a symbolic link rather than to the file to which the link points.
3112For example,
3113.Sq \&-lLo
3114is true for links owned by the invoking user.
3115.Va Lr ,
3116.Va Lw
3117and
3118.Va Lx
3119are always true for links and false for
3120non-links.
3121.Va L
3122has a different meaning when it is the last operator
3123in a multiple-operator test; see below.
3124.Pp
3125It is possible but not useful, and sometimes misleading, to combine operators
3126which expect
3127.Va file
3128to be a file with operators which do not
3129(e.g.,
3130.Va X
3131and
3132.Va t ) .
3133Following
3134.Va L
3135with a non-file operator
3136can lead to particularly strange results.
3137.Pp
3138Other operators return other information, i.e., not just
3139.Sq 0
3140or
3141.Sq 1
3142(+)
3143They have the same format as before;
3144.Va op
3145may be one of
3146.Pp
3147.PD 0
3148.RS +4
3149.TP 8
3150.B A
3151Last file access time, as the number of seconds since the epoch
3152.TP 8
3153.B A:
3154Like
3155.Va A
3156, but in timestamp format, e.g.,
3157.Sq Fri May 14 16:36:10 1993
3158.TP 8
3159.B M
3160Last file modification time
3161.TP 8
3162.B M:
3163Like
3164.Va M
3165, but in timestamp format
3166.TP 8
3167.B C
3168Last inode modification time
3169.TP 8
3170.B C:
3171Like
3172.Va C
3173, but in timestamp format
3174.TP 8
3175.B D
3176Device number
3177.TP 8
3178.B I
3179Inode number
3180.TP 8
3181.B F
3182Composite
3183.Va f
3184ile identifier, in the form
3185.Va device
3186:
3187.Va inode
3188.TP 8
3189.B L
3190The name of the file pointed to by a symbolic link
3191.TP 8
3192.B N
3193Number of (hard) links
3194.TP 8
3195.B P
3196Permissions, in octal, without leading zero
3197.TP 8
3198.B P:
3199Like
3200.Va P
3201, with leading zero
3202.TP 8
3203.B P\fImode
3204Equivalent to
3205.Sq \-P
3206.Va file
3207&
3208.Va mode
3209, e.g.,
3210.Sq \-P22
3211.Va file
3212returns
3213`22' if
3214.Va file
3215is writable by group and other,
3216.Sq 20
3217if by group only,
3218and
3219.Sq 0
3220if by neither
3221.TP 8
3222.B P\fImode\fB:
3223Like \fBP
3224.Va mode
3225, with leading zero
3226.TP 8
3227.B U
3228Numeric userid
3229.TP 8
3230.B U:
3231Username, or the numeric userid if the username is unknown
3232.TP 8
3233.B G
3234Numeric groupid
3235.TP 8
3236.B G:
3237Groupname, or the numeric groupid if the groupname is unknown
3238.TP 8
3239.B Z
3240Size, in bytes
3241.RE
3242.PD
3243.Pp
3244Only one of these operators may appear in a multiple-operator test, and it
3245must be the last.
3246Note that
3247.Va L
3248has a different meaning at the end of and
3249elsewhere in a multiple-operator test.
3250Because
3251.Sq 0
3252is a valid return value
3253for many of these operators, they do not return
3254.Sq 0
3255when they fail: most
3256return
3257.Sq \&-1
3258, and
3259.Va F
3260returns
3261.Sq \&:
3262.Pp
3263If the shell is compiled with POSIX defined (see the
3264.Va version
3265shell
3266variable), the result of a file inquiry is based on the permission bits of
3267the file and not on the result of the
3268.Va access
3269(2) system call.
3270For example, if one tests a file with
3271.Fl w\fR whose permissions would
3272ordinarily allow writing but which is on a file system mounted read-only,
3273the test will succeed in a POSIX shell but fail in a non-POSIX shell.
3274.Pp
3275File inquiry operators can also be evaluated with the
3276.Va filetest
3277builtin
3278command (q.v.) (+).
3279.Ss Jobs
3280The shell associates a
3281.Va job
3282with each pipeline.
3283It keeps a table of
3284current jobs, printed by the
3285.Va jobs
3286command, and assigns them small integer
3287numbers.
3288When a job is started asynchronously with
3289.Sq &
3290, the shell prints a
3291line which looks like
3292.IP "" 4
3293[1] 1234
3294.Pp
3295indicating that the job which was started asynchronously was job number 1 and
3296had one (top-level) process, whose process id was 1234.
3297.Pp
3298If you are running a job and wish to do something else you may hit the suspend
3299key (usually
3300.Sq ^Z ) ,
3301which sends a STOP signal to the current job.
3302The shell will then normally
3303indicate that the job has been
3304.Sq Suspended
3305and print another prompt.
3306If the
3307.Va listjobs
3308shell variable is set, all jobs will be listed
3309like the
3310.Va jobs
3311builtin command; if it is set to
3312.Sq long
3313the listing will
3314be in long format, like
3315.Sq jobs \&-l
3316You can then manipulate the state of the suspended job.
3317You can put it in the
3318.Dq background
3319 with the
3320.Va bg
3321command or run some other commands and
3322eventually bring the job back into the
3323.Sq foreground
3324' with
3325.Va fg
3326(See also the
3327.Va run-fg-editor
3328editor command.)
3329A
3330.Sq ^Z
3331takes effect immediately and is like an interrupt
3332in that pending output and unread input are discarded when it is typed.
3333The
3334.Va wait
3335builtin command causes the shell to wait for all background
3336jobs to complete.
3337.Pp
3338The
3339.Sq ^]
3340key sends a delayed suspend signal, which does not generate a STOP
3341signal until a program attempts to
3342.Va read
3343(2) it, to the current job.
3344This can usefully be typed ahead when you have prepared some commands for a
3345job which you wish to stop after it has read them.
3346The
3347.Sq ^Y
3348key performs this function in
3349.Xr csh 1
3350; in
3351.Nm
3352,
3353`^Y' is an editing command.
3354(+)
3355.Pp
3356A job being run in the background stops if it tries to read from the
3357terminal.
3358Background jobs are normally allowed to produce output, but this can
3359be disabled by giving the command
3360.Sq stty tostop
3361If you set this tty option,
3362then background jobs will stop when they try to produce output like they do
3363when they try to read input.
3364.Pp
3365There are several ways to refer to jobs in the shell.
3366The character
3367.Sq %
3368introduces a job name.
3369If you wish to refer to job number 1, you can name it
3370as
3371.Sq %1
3372Just naming a job brings it to the foreground; thus
3373.Sq %1
3374is a synonym
3375for
3376.Sq fg %1
3377, bringing job 1 back into the foreground.
3378Similarly, saying
3379.Sq %1 &
3380resumes job 1 in the background, just like
3381.Sq bg %1
3382A job can also be named
3383by an unambiguous prefix of the string typed in to start it:
3384.Sq %ex
3385would
3386normally restart a suspended
3387.Va ex
3388(1) job, if there were only one suspended
3389job whose name began with the string
3390.Sq ex
3391It is also possible to say
3392`%?
3393.Va string
3394' to specify a job whose text contains
3395.Va string
3396, if there
3397is only one such job.
3398.Pp
3399The shell maintains a notion of the current and previous jobs.
3400In output
3401pertaining to jobs, the current job is marked with a
3402.Sq +
3403and the previous job
3404with a
3405.Sq \-
3406The abbreviations
3407.Sq %+
3408,
3409.Sq %
3410, and (by analogy with the syntax of
3411the
3412.Va history
3413mechanism)
3414.Sq %%
3415all refer to the current job, and
3416.Sq %\-
3417refers
3418to the previous job.
3419.Pp
3420The job control mechanism requires that the
3421.Va stty
3422(1) option
3423.Sq new
3424be set
3425on some systems.
3426It is an artifact from a
3427.Sq new
3428implementation of the tty
3429driver which allows generation of interrupt characters from the keyboard to
3430tell jobs to stop.
3431See
3432.Va stty
3433(1) and the
3434.Va setty
3435builtin command for
3436details on setting options in the new tty driver.
3437.Ss "Status reporting"
3438The shell learns immediately whenever a process changes state.
3439It normally
3440informs you whenever a job becomes blocked so that no further progress is
3441possible, but only right before it prints a prompt.
3442This is done so that it
3443does not otherwise disturb your work.
3444If, however, you set the shell variable
3445.Va notify
3446, the shell will notify you immediately of changes of status in
3447background jobs.
3448There is also a shell command
3449.Va notify
3450which marks a
3451single process so that its status changes will be immediately reported.
3452By
3453default
3454.Va notify
3455marks the current process; simply say
3456.Sq notify
3457after
3458starting a background job to mark it.
3459.Pp
3460When you try to leave the shell while jobs are stopped, you will be
3461warned that
3462.Sq There are suspended jobs.
3463You may use the
3464.Va jobs
3465command to
3466see what they are.
3467If you do this or immediately try to exit again, the shell
3468will not warn you a second time, and the suspended jobs will be terminated.
3469.Ss "Automatic, periodic and timed events (+)"
3470There are various ways to run commands and take other actions automatically
3471at various times in the
3472.Sq `life cycle
3473' of the shell.
3474They are summarized here,
3475and described in detail under the appropriate
3476.Va Builtin commands
3477,
3478.Va Special shell variables
3479and
3480.Va Special aliases
3481.Pp
3482The
3483.Va sched
3484builtin command puts commands in a scheduled-event list,
3485to be executed by the shell at a given time.
3486.Pp
3487The
3488.Va beepcmd
3489,
3490.Va cwdcmd
3491,
3492.Va periodic
3493,
3494.Va precmd
3495,
3496.Va postcmd
3497,
3498and
3499.Va jobcmd
3500.Va Special aliases
3501can be set, respectively, to execute commands when the shell wants
3502to ring the bell, when the working directory changes, every
3503.Va tperiod
3504minutes, before each prompt, before each command gets executed, after each
3505command gets executed, and when a job is started or is brought into the
3506foreground.
3507.Pp
3508The
3509.Va autologout
3510shell variable can be set to log out or lock the shell
3511after a given number of minutes of inactivity.
3512.Pp
3513The
3514.Va mail
3515shell variable can be set to check for new mail periodically.
3516.Pp
3517The
3518.Va printexitvalue
3519shell variable can be set to print the exit status
3520of commands which exit with a status other than zero.
3521.Pp
3522The
3523.Va rmstar
3524shell variable can be set to ask the user, when
3525.Sq rm *
3526is
3527typed, if that is really what was meant.
3528.Pp
3529The
3530.Va time
3531shell variable can be set to execute the
3532.Va time
3533builtin
3534command after the completion of any process that takes more than a given
3535number of CPU seconds.
3536.Pp
3537The
3538.Va watch
3539and
3540.Va who
3541shell variables can be set to report when
3542selected users log in or out, and the
3543.Va log
3544builtin command reports
3545on those users at any time.
3546.Ss "Native Language System support (+)"
3547The shell is eight bit clean
3548(if so compiled; see the
3549.Va version
3550shell variable)
3551and thus supports character sets needing this capability.
3552NLS support differs depending on whether or not
3553the shell was compiled to use the system's NLS (again, see
3554.Va version
3555).
3556In either case, 7-bit ASCII is the default character code
3557(e.g., the classification of which characters are printable) and sorting,
3558and changing the
3559.Va LANG
3560or
3561.Va LC_CTYPE
3562environment variables
3563causes a check for possible changes in these respects.
3564.Pp
3565When using the system's NLS, the
3566.Va setlocale
3567(3) function is called
3568to determine appropriate character code/classification and sorting
3569(e.g., a 'en_CA.UTF-8' would yield "UTF-8" as a character code).
3570This function typically examines the
3571.Va LANG
3572and
3573.Va LC_CTYPE
3574environment variables; refer to the system documentation for further details.
3575When not using the system's NLS, the shell simulates it by assuming that the
3576ISO 8859-1 character set is used
3577whenever either of the
3578.Va LANG
3579and
3580.Va LC_CTYPE
3581variables are set, regardless of
3582their values.
3583Sorting is not affected for the simulated NLS.
3584.Pp
3585In addition, with both real and simulated NLS, all printable
3586characters in the range \e200\-\e377, i.e., those that have
3587M-
3588.Va char
3589bindings, are automatically rebound to
3590.Va self-insert-command
3591The corresponding binding for the escape-
3592.Va char
3593sequence, if any, is
3594left alone.
3595These characters are not rebound if the
3596.Va NOREBIND
3597environment variable
3598is set.
3599This may be useful for the simulated NLS or a primitive real NLS
3600which assumes full ISO 8859-1.
3601Otherwise, all M-
3602.Va char
3603bindings in the
3604range \e240\-\e377 are effectively undone.
3605Explicitly rebinding the relevant keys with
3606.Va bindkey
3607is of course still possible.
3608.Pp
3609Unknown characters (i.e., those that are neither printable nor control
3610characters) are printed in the format \ennn.
3611If the tty is not in 8 bit mode, other 8 bit characters are printed by
3612converting them to ASCII and using standout mode.
3613The shell
3614never changes the 7/8 bit mode of the tty and tracks user-initiated
3615changes of 7/8 bit mode.
3616NLS users (or, for that matter, those who want to
3617use a meta key) may need to explicitly set
3618the tty in 8 bit mode through the appropriate
3619.Va stty
3620(1)
3621command in, e.g., the
3622.Va ~/.login
3623file.
3624.Ss "OS variant support (+)"
3625A number of new builtin commands are provided to support features in
3626particular operating systems.
3627All are described in detail in the
3628.Va Builtin commands
3629section.
3630.Pp
3631On systems that support TCF (aix-ibm370, aix-ps2),
3632.Va getspath
3633and
3634.Va setspath
3635get and set the system execution path,
3636.Va getxvers
3637and
3638.Va setxvers
3639get and set the experimental version prefix
3640and
3641.Va migrate
3642migrates processes between sites.
3643The
3644.Va jobs
3645builtin
3646prints the site on which each job is executing.
3647.Pp
3648Under BS2000,
3649.Va bs2cmd
3650executes commands of the underlying BS2000/OSD
3651operating system.
3652.Pp
3653Under Domain/OS,
3654.Va inlib
3655adds shared libraries to the current environment,
3656.Va rootnode
3657changes the rootnode and
3658.Va ver
3659changes the systype.
3660.Pp
3661Under Mach,
3662.Va setpath
3663is equivalent to Mach's
3664.Va setpath
3665(1).
3666.Pp
3667Under Masscomp/RTU and Harris CX/UX,
3668.Va universe
3669sets the universe.
3670.Pp
3671Under Harris CX/UX,
3672.Va ucb
3673or
3674.Va att
3675runs a command under the specified
3676universe.
3677.Pp
3678Under Convex/OS,
3679.Va warp
3680prints or sets the universe.
3681.Pp
3682The
3683.Va VENDOR
3684,
3685.Va OSTYPE
3686and
3687.Va MACHTYPE
3688environment variables
3689indicate respectively the vendor, operating system and machine type
3690(microprocessor class or machine model) of the
3691system on which the shell thinks it is running.
3692These are particularly useful when sharing one's home directory between several
3693types of machines; one can, for example,
3694.IP "" 4
3695set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .)
3696.Pp
3697in one's
3698.Va ~/.login
3699and put executables compiled for each machine in the
3700appropriate directory.
3701.Pp
3702The
3703.Va version
3704shell
3705variable indicates what options were chosen when the shell was compiled.
3706.Pp
3707Note also the
3708.Va newgrp
3709builtin, the
3710.Va afsuser
3711and
3712.Va echo_style
3713shell variables and the system-dependent locations of
3714the shell's input files (see
3715.Va FILES
3716).
3717.Ss "Signal handling"
3718Login shells ignore interrupts when reading the file
3719.Va ~/.logout
3720The shell ignores quit signals unless started with
3721.Fl q\fR.
3722Login shells catch the terminate signal, but non-login shells inherit the
3723terminate behavior from their parents.
3724Other signals have the values which the shell inherited from its parent.
3725.Pp
3726In shell scripts, the shell's handling of interrupt and terminate signals
3727can be controlled with
3728.Va onintr
3729, and its handling of hangups can be
3730controlled with
3731.Va hup
3732and
3733.Va nohup
3734.Pp
3735The shell exits on a hangup (see also the
3736.Va logout
3737shell variable).
3738By
3739default, the shell's children do too, but the shell does not send them a
3740hangup when it exits.
3741.Va hup
3742arranges for the shell to send a hangup to
3743a child when it exits, and
3744.Va nohup
3745sets a child to ignore hangups.
3746.Ss "Terminal management (+)"
3747The shell uses three different sets of terminal (
3748.Dq tty
3749) modes:
3750`edit', used when editing,
3751.Sq quote
3752, used when quoting literal characters,
3753and
3754.Sq execute
3755, used when executing commands.
3756The shell holds some settings in each mode constant, so commands which leave
3757the tty in a confused state do not interfere with the shell.
3758The shell also matches changes in the speed and padding of the tty.
3759The list of tty modes that are kept constant
3760can be examined and modified with the
3761.Va setty
3762builtin.
3763Note that although the editor uses CBREAK mode (or its equivalent),
3764it takes typed-ahead characters anyway.
3765.Pp
3766The
3767.Va echotc
3768,
3769.Va settc
3770and
3771.Va telltc
3772commands can be used to
3773manipulate and debug terminal capabilities from the command line.
3774.Pp
3775On systems that support SIGWINCH or SIGWINDOW, the shell
3776adapts to window resizing automatically and adjusts the environment
3777variables
3778.Va LINES
3779and
3780.Va COLUMNS
3781if set.
3782If the environment
3783variable
3784.Va TERMCAP
3785contains li# and co# fields, the shell adjusts
3786them to reflect the new window size.
3787.Sh REFERENCE
3788The next sections of this manual describe all of the available
3789.Va Builtin commands
3790,
3791.Va Special aliases
3792and
3793.Va Special shell variables
3794.Ss "Builtin commands"
3795.TP 8
3796.B %\fIjob
3797A synonym for the
3798.Va fg
3799builtin command.
3800.TP 8
3801.B %\fIjob \fB&
3802A synonym for the
3803.Va bg
3804builtin command.
3805.TP 8
3806.B :
3807Does nothing, successfully.
3808.Pp
3809.B @
3810.br
3811.B @ \fIname\fB = \fIexpr
3812.br
3813.B @
3814.Va name
3815[
3816.Va index
3817]\fB = \fIexpr
3818.br
3819.B @ \fIname
3820.Va ++
3821|\fB--
3822.PD 0
3823.TP 8
3824.B @
3825.Va name
3826[
3827.Va index
3828]
3829.Va ++
3830|\fB--
3831The first form prints the values of all shell variables.
3832.PD
3833.RS +8
3834.Pp
3835The second form assigns the value of
3836.Va expr
3837to
3838.Va name
3839The third form assigns the value of
3840.Va expr
3841to the
3842.Va index
3843'th
3844component of
3845.Va name
3846; both
3847.Va name
3848and its
3849.Va index
3850'th component
3851must already exist.
3852.Pp
3853.Va expr
3854may contain the operators
3855.Sq *
3856,
3857.Sq +
3858, etc., as in C.
3859If
3860.Va expr
3861contains
3862.Sq <
3863,
3864.Sq >
3865,
3866.Sq &
3867or
3868.Sq
3869then at least that part of
3870.Va expr
3871must be placed within
3872.Sq ()
3873Note that the syntax of
3874.Va expr
3875has nothing to do with that described
3876under
3877.Va Expressions
3878.Pp
3879The fourth and fifth forms increment (`++') or decrement (`\-\-')
3880.Va name
3881or its
3882.Va index
3883'th component.
3884.Pp
3885The space between
3886.Sq @
3887and
3888.Va name
3889is required.
3890The spaces between
3891.Va name
3892and
3893.Sq =
3894and between
3895.Sq =
3896and
3897.Va expr
3898are optional.
3899Components of
3900.Va expr
3901must be separated by spaces.
3902.RE
3903.PD
3904.TP 8
3905.B alias \fR[
3906.Va name
3907[
3908.Va wordlist
3909]]
3910Without arguments, prints all aliases.
3911With
3912.Va name
3913, prints the alias for name.
3914With
3915.Va name
3916and
3917.Va wordlist
3918, assigns
3919.Va wordlist
3920as the alias of
3921.Va name
3922.Va wordlist
3923is command and filename substituted.
3924.Va name
3925may not be
3926.Sq alias
3927or
3928.Sq unalias
3929See also the
3930.Va unalias
3931builtin command.
3932.TP 8
3933.B alloc
3934Shows the amount of dynamic memory acquired, broken down into used and free
3935memory.
3936With an argument shows the number of free and used blocks in each size
3937category.
3938The categories start at size 8 and double at each step.
3939This
3940command's output may vary across system types, because systems other than the VAX
3941may use a different memory allocator.
3942.TP 8
3943.B bg \fR[\fB%
3944.Va job
3945...]
3946Puts the specified jobs (or, without arguments, the current job)
3947into the background, continuing each if it is stopped.
3948.Va job
3949may be a number, a string,
3950.Sq
3951,
3952.Sq %
3953,
3954.Sq +
3955or
3956.Sq \-
3957as described
3958under
3959.Va Jobs
3960.Pp
3961.B bindkey \fR[
3962.Fl l\fR|
3963.Fl d\fR|
3964.Fl e\fR|
3965.Fl v\fR|
3966.Fl u\fR] (+)
3967.br
3968.Va bindkey
3969[
3970.Fl a\fR] [
3971.Fl b\fR] [
3972.Fl k\fR] [
3973.Fl r\fR] [
3974.Fl \-\fR]
3975.Va key
3976(+)
3977.PD 0
3978.TP 8
3979.Va bindkey
3980[
3981.Fl a\fR] [
3982.Fl b\fR] [
3983.Fl k\fR] [
3984.Fl c\fR|
3985.Fl s\fR] [
3986.Fl \-\fR]
3987.Va key command
3988(+)
3989.\" .B macro can't take too many words, so I used \fB in the previous tags
3990Without options, the first form lists all bound keys and the editor command to which each is bound,
3991the second form lists the editor command to which
3992.Va key
3993is bound and
3994the third form binds the editor command
3995.Va command
3996to
3997.Va key
3998Options include:
3999.PD
4000.Pp
4001.PD 0
4002.RS +8
4003.TP 4
4004.Fl l
4005Lists all editor commands and a short description of each.
4006.TP 4
4007.Fl d
4008Binds all keys to the standard bindings for the default editor,
4009as per
4010.Va -e
4011and
4012.Va -v
4013below.
4014.TP 4
4015.Fl e
4016Binds all keys to
4017.Va emacs
4018(1)\-style bindings.
4019Unsets
4020.Va vimode
4021.TP 4
4022.Fl v
4023Binds all keys to
4024.Va vi
4025(1)\-style bindings.
4026Sets
4027.Va vimode
4028.TP 4
4029.Fl a
4030Lists or changes key-bindings in the alternative key map.
4031This is the key map used in
4032.Va vimode
4033command mode.
4034.TP 4
4035.Fl b
4036.Va key
4037is interpreted as
4038a control character written ^
4039.Va character
4040(e.g.,
4041.Sq ^A
4042) or
4043C-
4044.Va character
4045(e.g.,
4046.Sq C-A
4047),
4048a meta character written M-
4049.Va character
4050(e.g.,
4051.Sq M-A
4052),
4053a function key written F-
4054.Va string
4055(e.g.,
4056.Sq F-string
4057),
4058or an extended prefix key written X-
4059.Va character
4060(e.g.,
4061.Sq X-A
4062).
4063.TP 4
4064.Fl k
4065.Va key
4066is interpreted as a symbolic arrow key name, which may be one of
4067`down',
4068.Sq up
4069,
4070.Sq left
4071or
4072.Sq right
4073.TP 4
4074.Fl r
4075Removes
4076.Va key
4077's binding.
4078Be careful:
4079.Sq bindkey \-r
4080does
4081.Va not
4082bind
4083.Va key
4084to
4085.Va self-insert-command
4086(q.v.), it unbinds
4087.Va key
4088completely.
4089.TP 4
4090.Fl c
4091.Va command
4092is interpreted as a builtin or external command instead of an
4093editor command.
4094.TP 4
4095.Fl s
4096.Va command
4097is taken as a literal string and treated as terminal input
4098when
4099.Va key
4100is typed.
4101Bound keys in
4102.Va command
4103are themselves
4104reinterpreted, and this continues for ten levels of interpretation.
4105.TP 4
4106.Fl \-
4107Forces a break from option processing, so the next word is taken as
4108.Va key
4109even if it begins with '\-'.
4110.TP 4
4111.Fl u \fR(or any invalid option)
4112Prints a usage message.
4113.PD
4114.Pp
4115.Va key
4116may be a single character or a string.
4117If a command is bound to a string, the first character of the string is bound to
4118.Va sequence-lead-in
4119and the entire string is bound to the command.
4120.Pp
4121Control characters in
4122.Va key
4123can be literal (they can be typed by preceding
4124them with the editor command
4125.Va quoted-insert
4126, normally bound to
4127.Sq ^V
4128) or
4129written caret-character style, e.g.,
4130.Sq ^A
4131Delete is written
4132.Sq ^?
4133(caret-question mark).
4134.Va key
4135and
4136.Va command
4137can contain backslashed
4138escape sequences (in the style of System V
4139.Va echo
4140(1)) as follows:
4141.RS +4
4142.TP 8
4143.PD 0
4144.B \ea
4145Bell
4146.TP 8
4147.B \eb
4148Backspace
4149.TP 8
4150.B \ee
4151Escape
4152.TP 8
4153.B \ef
4154Form feed
4155.TP 8
4156.B \en
4157Newline
4158.TP 8
4159.B \er
4160Carriage return
4161.TP 8
4162.B \et
4163Horizontal tab
4164.TP 8
4165.B \ev
4166Vertical tab
4167.TP 8
4168.B \e\fInnn
4169The ASCII character corresponding to the octal number
4170.Va nnn
4171.PD
4172.RE
4173.Pp
4174`\e' nullifies the special meaning of the following character, if it has
4175any, notably
4176.Sq \e
4177and
4178.Sq ^
4179.RE
4180.TP 8
4181.B bs2cmd
4182.Va bs2000-command
4183(+)
4184Passes
4185.Va bs2000-command
4186to the BS2000 command interpreter for
4187execution. Only non-interactive commands can be executed, and it is
4188not possible to execute any command that would overlay the image
4189of the current process, like /EXECUTE or /CALL-PROCEDURE. (BS2000 only)
4190.TP 8
4191.B break
4192Causes execution to resume after the
4193.Va end
4194of the nearest
4195enclosing
4196.Va foreach
4197or
4198.Va while
4199The remaining commands on the
4200current line are executed.
4201Multi-level breaks are thus
4202possible by writing them all on one line.
4203.TP 8
4204.B breaksw
4205Causes a break from a
4206.Va switch
4207, resuming after the
4208.Va endsw
4209.TP 8
4210.B builtins \fR(+)
4211Prints the names of all builtin commands.
4212.TP 8
4213.B bye \fR(+)
4214A synonym for the
4215.Va logout
4216builtin command.
4217Available only if the shell was so compiled;
4218see the
4219.Va version
4220shell variable.
4221.TP 8
4222.B case \fIlabel\fB:
4223A label in a
4224.Va switch
4225statement as discussed below.
4226.TP 8
4227.B cd \fR[
4228.Fl p\fR] [
4229.Fl l\fR] [
4230.Fl n\fR|
4231.Fl v\fR] [\I--\fR] [
4232.Va name
4233]
4234If a directory
4235.Va name
4236is given, changes the shell's working directory
4237to
4238.Va name
4239If not, changes to
4240.Va home
4241, unless the
4242.Va cdtohome
4243variable is not set, in which case a
4244.Va name
4245is required.
4246If
4247.Va name
4248is
4249.Sq \-
4250it is interpreted as the previous working directory
4251(see
4252.Va Other substitutions
4253).
4254(+)
4255If
4256.Va name
4257is not a subdirectory of the current directory
4258(and does not begin with
4259.Sq /
4260,
4261.Sq ./
4262or
4263.Sq ../
4264), each component of the variable
4265.Va cdpath
4266is checked to see if it has a subdirectory
4267.Va name
4268Finally, if
4269all else fails but
4270.Va name
4271is a shell variable whose value
4272begins with
4273.Sq /
4274or '.', then this is tried to see if it is a directory, and
4275the
4276.Fl p\fR option is implied.
4277.RS +8
4278.Pp
4279With
4280.Fl p\fR, prints the final directory stack, just like
4281.Va dirs
4282The
4283.Fl l\fR,
4284.Fl n\fR and
4285.Fl v\fR flags have the same effect on
4286.Va cd
4287as on
4288.Va dirs
4289, and they imply
4290.Fl p\fR.
4291(+)
4292Using
4293.Fl \-\fR forces a break from option processing so the next word
4294is taken as the directory
4295.Va name
4296even if it begins with '\-'. (+)
4297.Pp
4298See also the
4299.Va implicitcd
4300and
4301.Va cdtohome
4302shell variables.
4303.RE
4304.TP 8
4305.B chdir
4306A synonym for the
4307.Va cd
4308builtin command.
4309.TP 8
4310.B complete \fR[
4311.Va command
4312[\fIword\fB/\fIpattern\fB/
4313.Va list
4314[\fB:
4315.Va select
4316]
4317.Va /
4318[[
4319.Va suffix
4320]
4321.Va /
4322] ...]] (+)
4323Without arguments, lists all completions.
4324With
4325.Va command
4326, lists completions for
4327.Va command
4328With
4329.Va command
4330and
4331.Va word
4332etc., defines completions.
4333.RS +8
4334.Pp
4335.Va command
4336may be a full command name or a glob-pattern
4337(see
4338.Va Filename substitution
4339).
4340It can begin with
4341.Sq \-
4342to indicate that
4343completion should be used only when
4344.Va command
4345is ambiguous.
4346.Pp
4347.Va word
4348specifies which word relative to the current word
4349is to be completed, and may be one of the following:
4350.Pp
4351.PD 0
4352.RS +4
4353.TP 4
4354.B c
4355Current-word completion.
4356.Va pattern
4357is a glob-pattern which must match the beginning of the current word on
4358the command line.
4359.Va pattern
4360is ignored when completing the current word.
4361.TP 4
4362.B C
4363Like
4364.Va c
4365, but includes
4366.Va pattern
4367when completing the current word.
4368.TP 4
4369.B n
4370Next-word completion.
4371.Va pattern
4372is a glob-pattern which must match the beginning of the previous word on
4373the command line.
4374.TP 4
4375.B N
4376Like
4377.Va n
4378, but must match the beginning of the word two before the current word.
4379.TP 4
4380.B p
4381Position-dependent completion.
4382.Va pattern
4383is a numeric range, with the same syntax used to index shell
4384variables, which must include the current word.
4385.PD
4386.RE
4387.Pp
4388.Va list
4389, the list of possible completions, may be one of the following:
4390.Pp
4391.PD 0
4392.RS +4
4393.TP 8
4394.B a
4395Aliases
4396.TP 8
4397.B b
4398Bindings (editor commands)
4399.TP 8
4400.B c
4401Commands (builtin or external commands)
4402.TP 8
4403.B C
4404External commands which begin with the supplied path prefix
4405.TP 8
4406.B d
4407Directories
4408.TP 8
4409.B D
4410Directories which begin with the supplied path prefix
4411.TP 8
4412.B e
4413Environment variables
4414.TP 8
4415.B f
4416Filenames
4417.TP 8
4418.B F
4419Filenames which begin with the supplied path prefix
4420.TP 8
4421.B g
4422Groupnames
4423.TP 8
4424.B j
4425Jobs
4426.TP 8
4427.B l
4428Limits
4429.TP 8
4430.B n
4431Nothing
4432.TP 8
4433.B s
4434Shell variables
4435.TP 8
4436.B S
4437Signals
4438.TP 8
4439.B t
4440Plain (
4441.Dq text )
4442files
4443.TP 8
4444.B T
4445Plain (
4446.Dq text )
4447files which begin with the supplied path prefix
4448.TP 8
4449.B v
4450Any variables
4451.TP 8
4452.B u
4453Usernames
4454.TP 8
4455.B x
4456Like
4457.Va n ,
4458but prints
4459.Va select
4460when
4461.Va list-choices
4462is used.
4463.TP 8
4464.B X
4465Completions
4466.TP 8
4467$
4468.Va var
4469Words from the variable
4470.Va var
4471.TP 8
4472(...)
4473Words from the given list
4474.TP 8
4475\`...\`
4476Words from the output of command
4477.PD
4478.RE
4479.Pp
4480.Va select
4481is an optional glob-pattern.
4482If given, words from only
4483.Va list
4484that match
4485.Va select
4486are considered
4487and the
4488.Va fignore
4489shell variable is ignored.
4490The last three types of completion may not have a
4491.Va select
4492pattern, and
4493.Va x
4494uses
4495.Va select
4496as an explanatory message when
4497the
4498.Va list-choices
4499editor command is used.
4500.Pp
4501.Va suffix
4502is a single character to be appended to a successful
4503completion.
4504If null, no character is appended.
4505If omitted (in which
4506case the fourth delimiter can also be omitted), a slash is appended to
4507directories and a space to other words.
4508.Pp
4509.Va command
4510invoked from \`...\` version has additional environment
4511variable set, the variable name is \%
4512.Va COMMAND_LINE
4513\% and
4514contains (as its name indicates) contents of the current (already
4515typed in) command line. One can examine and use contents of the
4516\%
4517.Va COMMAND_LINE
4518\% variable in her custom script to build more
4519sophisticated completions (see completion for svn(1) included in
4520this package).
4521.Pp
4522Now for some examples.
4523Some commands take only directories as arguments,
4524so there's no point completing plain files.
4525.IP "" 4
4526> complete cd 'p/1/d/'
4527.Pp
4528completes only the first word following
4529.Sq cd
4530(`p/1') with a directory.
4531.Va p
4532-type completion can also be used to narrow down command completion:
4533.IP "" 4
4534> co[^D]
4535.br
4536complete compress
4537.br
4538> complete \-co* 'p/0/(compress)/'
4539.br
4540> co[^D]
4541.br
4542> compress
4543.Pp
4544This completion completes commands (words in position 0,
4545.Sq p/0
4546)
4547which begin with
4548.Sq co
4549(thus matching
4550.Sq co*
4551) to
4552.Sq compress
4553(the only
4554word in the list).
4555The leading
4556.Sq \-
4557indicates that this completion is to be used with only
4558ambiguous commands.
4559.IP "" 4
4560> complete find 'n/\-user/u/'
4561.Pp
4562is an example of
4563.Va n
4564-type completion.
4565Any word following
4566.Sq find
4567and
4568immediately following
4569.Sq \-user
4570is completed from the list of users.
4571.IP "" 4
4572> complete cc 'c/\-I/d/'
4573.Pp
4574demonstrates
4575.Va c
4576-type completion.
4577Any word following
4578.Sq cc
4579and beginning
4580with
4581.Sq \-I
4582is completed as a directory.
4583`\-I' is not taken as part of the
4584directory because we used lowercase
4585.Va c
4586.Pp
4587Different
4588.Va list
4589s are useful with different commands.
4590.IP "" 4
4591> complete alias 'p/1/a/'
4592.br
4593> complete man 'p/*/c/'
4594.br
4595> complete set 'p/1/s/'
4596.br
4597> complete true 'p/1/x:Truth has no options./'
4598.Pp
4599These complete words following
4600.Sq alias
4601with aliases,
4602.Sq man
4603with commands,
4604and
4605.Sq set
4606with shell variables.
4607`true' doesn't have any options, so
4608.Va x
4609does nothing when completion
4610is attempted and prints
4611.Sq Truth has no options.
4612when completion choices are listed.
4613.Pp
4614Note that the
4615.Va man
4616example, and several other examples below, could
4617just as well have used 'c/*' or 'n/*' as 'p/*'.
4618.Pp
4619Words can be completed from a variable evaluated at completion time,
4620.IP "" 4
4621> complete ftp 'p/1/$hostnames/'
4622.br
4623> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu)
4624.br
4625> ftp [^D]
4626.br
4627rtfm.mit.edu tesla.ee.cornell.edu
4628.br
4629> ftp [^C]
4630.br
4631> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net)
4632.br
4633> ftp [^D]
4634.br
4635rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net
4636.Pp
4637or from a command run at completion time:
4638.IP "" 4
4639> complete kill 'p/*/\`ps | awk \e{print\e \e$1\e}\`/'
4640.br
4641> kill \-9 [^D]
4642.br
464323113 23377 23380 23406 23429 23529 23530 PID
4644.Pp
4645Note that the
4646.Va complete
4647command does not itself quote its arguments,
4648so the braces, space and
4649.Sq $
4650in
4651.Sq {print $1}
4652must be quoted explicitly.
4653.Pp
4654One command can have multiple completions:
4655.IP "" 4
4656> complete dbx 'p/2/(core)/' 'p/*/c/'
4657.Pp
4658completes the second argument to
4659.Sq dbx
4660with the word
4661.Sq core
4662and all other
4663arguments with commands.
4664Note that the positional completion is specified
4665before the next-word completion.
4666Because completions are evaluated from left to right, if
4667the next-word completion were specified first it would always match
4668and the positional completion would never be executed.
4669This is a
4670common mistake when defining a completion.
4671.Pp
4672The
4673.Va select
4674pattern is useful when a command takes files with only
4675particular forms as arguments.
4676For example,
4677.IP "" 4
4678> complete cc 'p/*/f:*.[cao]/'
4679.Pp
4680completes
4681.Sq cc
4682arguments to files ending in only
4683.Sq .c
4684,
4685.Sq .a
4686, or
4687.Sq .o
4688.Va select
4689can also exclude files, using negation of a glob-pattern as
4690described under
4691.Va Filename substitution
4692One might use
4693.IP "" 4
4694> complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'
4695.Pp
4696to exclude precious source code from
4697.Sq rm
4698completion.
4699Of course, one
4700could still type excluded names manually or override the completion
4701mechanism using the
4702.Va complete-word-raw
4703or
4704.Va list-choices-raw
4705editor commands (q.v.).
4706.Pp
4707The
4708.Sq C
4709,
4710.Sq D
4711,
4712.Sq F
4713and
4714.Sq T
4715
4716.Va list
4717s are like
4718.Sq c
4719,
4720.Sq d
4721,
4722.Sq f
4723and
4724.Sq t
4725respectively, but they use the
4726.Va select
4727argument in a different way: to
4728restrict completion to files beginning with a particular path prefix.
4729For
4730example, the Elm mail program uses
4731.Sq =
4732as an abbreviation for one's mail
4733directory.
4734One might use
4735.IP "" 4
4736> complete elm c@=@F:$HOME/Mail/@
4737.Pp
4738to complete
4739.Sq elm \-f =
4740as if it were
4741.Sq elm \-f ~/Mail/
4742Note that we used
4743.Sq @
4744instead of
4745.Sq /
4746to avoid confusion with the
4747.Va select
4748argument, and we used
4749`$HOME' instead of
4750.Sq ~
4751because home directory substitution works at only the
4752beginning of a word.
4753.Pp
4754.Va suffix
4755is used to add a nonstandard suffix
4756(not space or
4757.Sq /
4758for directories) to completed words.
4759.IP "" 4
4760> complete finger 'c/*@/$hostnames/' 'p/1/u/@'
4761.Pp
4762completes arguments to
4763.Sq finger
4764from the list of users, appends an
4765.Sq @
4766,
4767and then completes after the
4768.Sq @
4769from the
4770.Sq hostnames
4771variable.
4772Note
4773again the order in which the completions are specified.
4774.Pp
4775Finally, here's a complex example for inspiration:
4776.IP "" 4
4777> complete find \e
4778.br
4779\&'n/\-name/f/' 'n/\-newer/f/' 'n/\-{,n}cpio/f/' \e
4780.br
4781\&\'n/\-exec/c/' 'n/\-ok/c/' 'n/\-user/u/' \e
4782.br
4783\&'n/\-group/g/' 'n/\-fstype/(nfs 4.2)/' \e
4784.br
4785\&'n/\-type/(b c d f l p s)/' \e
4786.br
4787\'c/\-/(name newer cpio ncpio exec ok user \e
4788.br
4789group fstype type atime ctime depth inum \e
4790.br
4791ls mtime nogroup nouser perm print prune \e
4792.br
4793size xdev)/' \e
4794.br
4795\&'p/*/d/'
4796.Pp
4797This completes words following
4798.Sq \-name
4799,
4800.Sq \-newer
4801,
4802.Sq \-cpio
4803or
4804.Sq ncpio
4805(note the pattern which matches both) to files,
4806words following
4807.Sq \-exec
4808or
4809.Sq \-ok
4810to commands, words following
4811.Sq user
4812and
4813.Sq group
4814to users and groups respectively
4815and words following
4816.Sq \-fstype
4817or
4818.Sq \-type
4819to members of the
4820given lists.
4821It also completes the switches themselves from the given list
4822(note the use of
4823.Va c
4824-type completion)
4825and completes anything not otherwise completed to a directory.
4826Whew.
4827.Pp
4828Remember that programmed completions are ignored if the word being completed
4829is a tilde substitution (beginning with
4830.Sq ~
4831) or a variable (beginning with
4832.Sq $
4833).
4834See also the
4835.Va uncomplete
4836builtin command.
4837.RE
4838.TP 8
4839.B continue
4840Continues execution of the nearest enclosing
4841.Va while
4842or
4843.Va foreach
4844The rest of the commands on the current line are executed.
4845.TP 8
4846.B default:
4847Labels the default case in a
4848.Va switch
4849statement.
4850It should come after all
4851.Va case
4852labels.
4853.Pp
4854.B dirs \fR[
4855.Fl l\fR] [
4856.Fl n\fR|
4857.Fl v\fR]
4858.br
4859.B dirs \-S\fR|
4860.Fl L \fR[
4861.Va filename
4862] (+)
4863.PD 0
4864.TP 8
4865.B dirs \-c \fR(+)
4866The first form prints the directory stack.
4867The top of the stack is at the
4868left and the first directory in the stack is the current directory.
4869With
4870.Fl l\fR,
4871.Sq ~
4872or
4873.Sq ~\fIname\fP
4874in the output is expanded explicitly
4875to
4876.Va home
4877or the pathname of the home directory for user \fIname\fP.
4878(+)
4879With
4880.Fl n\fR, entries are wrapped before they reach the edge of the screen.
4881(+)
4882With
4883.Fl v\fR, entries are printed one per line, preceded by their stack positions.
4884(+)
4885If more than one of
4886.Fl n\fR or
4887.Fl v\fR is given,
4888.Fl v\fR takes precedence.
4889.Fl p\fR is accepted but does nothing.
4890.PD
4891.RS +8
4892.Pp
4893With
4894.Fl S\fR, the second form saves the directory stack to
4895.Va filename
4896as a series of
4897.Va cd
4898and
4899.Va pushd
4900commands.
4901With
4902.Fl L\fR, the shell sources
4903.Va filename
4904, which is presumably
4905a directory stack file saved by the
4906.Fl S\fR option or the
4907.Va savedirs
4908mechanism.
4909In either case,
4910.Va dirsfile
4911is used if
4912.Va filename
4913is not given and
4914.Va ~/.cshdirs
4915is used if
4916.Va dirsfile
4917is unset.
4918.Pp
4919Note that login shells do the equivalent of
4920.Sq dirs \-L
4921on startup
4922and, if
4923.Va savedirs
4924is set,
4925.Sq dirs \-S
4926before exiting.
4927Because only
4928.Va ~/.tcshrc
4929is normally sourced before
4930.Va ~/.cshdirs
4931,
4932.Va dirsfile
4933should be set in
4934.Va ~/.tcshrc
4935rather than
4936.Va ~/.login
4937.Pp
4938The last form clears the directory stack.
4939.RE
4940.TP 8
4941.B echo \fR[
4942.Fl n\fR]
4943.Va word
4944...
4945Writes each
4946.Va word
4947to the shell's standard
4948output, separated by spaces and terminated with a newline.
4949The
4950.Va echo_style
4951shell variable may be set to emulate (or not) the flags and escape
4952sequences of the BSD and/or System V versions of
4953.Va echo
4954; see
4955.Va echo
4956(1).
4957.TP 8
4958.B echotc \fR[
4959.Fl sv\fR]
4960.Va arg
4961... (+)
4962Exercises the terminal capabilities (see
4963.Va termcap
4964(5)) in
4965.Va args
4966For example, 'echotc home' sends the cursor to the home position,
4967\&'echotc cm 3 10' sends it to column 3 and row 10, and
4968\&'echotc ts 0; echo "This is a test."; echotc fs' prints "This is a test."
4969in the status line.
4970.RS +8
4971.Pp
4972If
4973.Va arg
4974is 'baud', 'cols', 'lines', 'meta' or 'tabs', prints the
4975value of that capability ("yes" or "no" indicating that the terminal does
4976or does not have that capability).
4977One might use this to make the output
4978from a shell script less verbose on slow terminals, or limit command
4979output to the number of lines on the screen:
4980.IP "" 4
4981> set history=\`echotc lines\`
4982.br
4983> @ history\-\-
4984.Pp
4985Termcap strings may contain wildcards which will not echo correctly.
4986One should use double quotes when setting a shell variable to a terminal
4987capability string, as in the following example that places the date in
4988the status line:
4989.IP "" 4
4990> set tosl="\`echotc ts 0\`"
4991.br
4992> set frsl="\`echotc fs\`"
4993.br
4994> echo \-n "$tosl";date; echo \-n "$frsl"
4995.Pp
4996With
4997.Fl s\fR, nonexistent capabilities return the empty string rather
4998than causing an error.
4999With
5000.Fl v\fR, messages are verbose.
5001.RE
5002.Pp
5003.B else
5004.br
5005.B end
5006.br
5007.B endif
5008.PD 0
5009.TP 8
5010.B endsw
5011See the description of the
5012.Va foreach
5013,
5014.Va if
5015,
5016.Va switch
5017, and
5018.Va while
5019statements below.
5020.PD
5021.TP 8
5022.B eval
5023.Va arg
5024...
5025Treats the arguments as input to the
5026shell and executes the resulting command(s) in the context
5027of the current shell.
5028This is usually used to execute commands
5029generated as the result of command or variable substitution,
5030because parsing occurs before these substitutions.
5031See
5032.Va tset
5033(1) for a sample use of
5034.Va eval
5035.TP 8
5036.B exec
5037.Va command
5038Executes the specified command in place of the current shell.
5039.TP 8
5040.B exit \fR[
5041.Va expr
5042]
5043The shell exits either with the value of the specified
5044.Va expr
5045(an expression, as described under
5046.Va Expressions
5047)
5048or, without
5049.Va expr
5050, with the value 0.
5051.TP 8
5052.B fg \fR[\fB%
5053.Va job
5054...]
5055Brings the specified jobs (or, without arguments, the current job)
5056into the foreground, continuing each if it is stopped.
5057.Va job
5058may be a number, a string,
5059.Sq
5060,
5061.Sq %
5062,
5063.Sq +
5064or
5065.Sq \-
5066as described
5067under
5068.Va Jobs
5069See also the
5070.Va run-fg-editor
5071editor command.
5072.TP 8
5073.B filetest \-
5074.Va op file
5075... (+)
5076Applies
5077.Va op
5078(which is a file inquiry operator as described under
5079.Va File inquiry operators
5080) to each
5081.Va file
5082and returns the results as a
5083space-separated list.
5084.Pp
5085.B foreach \fIname \fB(\fIwordlist\fB)
5086.br
5087\&...
5088.PD 0
5089.TP 8
5090.B end
5091Successively sets the variable
5092.Va name
5093to each member of
5094.Va wordlist
5095and executes the sequence of commands between this command
5096and the matching
5097.Va end
5098(Both
5099.Va foreach
5100and
5101.Va end
5102must appear alone on separate lines.)  The builtin command
5103.Va continue
5104may be used to continue the loop prematurely and
5105the builtin command
5106.Va break
5107to terminate it prematurely.
5108When this command is read from the terminal, the loop is read once
5109prompting with
5110.Sq foreach?
5111(or
5112.Va prompt2
5113) before any statements in
5114the loop are executed.
5115If you make a mistake typing in a
5116loop at the terminal you can rub it out.
5117.PD
5118.TP 8
5119.B getspath \fR(+)
5120Prints the system execution path.
5121(TCF only)
5122.TP 8
5123.B getxvers \fR(+)
5124Prints the experimental version prefix.
5125(TCF only)
5126.TP 8
5127.B glob \fIwordlist
5128Like
5129.Va echo
5130, but the
5131.Sq -n
5132parameter is not recognized and words are
5133delimited by null characters in the output.
5134Useful for
5135programs which wish to use the shell to filename expand a list of words.
5136.TP 8
5137.B goto \fIword
5138.Va word
5139is filename and command-substituted to
5140yield a string of the form
5141.Sq label
5142The shell rewinds its
5143input as much as possible, searches for a line of the
5144form
5145.Sq label:
5146, possibly preceded by blanks or tabs, and
5147continues execution after that line.
5148.TP 8
5149.B hashstat
5150Prints a statistics line indicating how effective the
5151internal hash table has been at locating commands (and avoiding
5152.Va exec
5153's).
5154An
5155.Va exec
5156is attempted for each component of the
5157.Va path
5158where the hash function indicates a possible hit, and
5159in each component which does not begin with a
5160.Sq /
5161.IP
5162On machines without
5163.Va vfork
5164(2), prints only the number and size of
5165hash buckets.
5166.Pp
5167.B history \fR[
5168.Fl hTr\fR] [
5169.Va n
5170]
5171.br
5172.B history \-S\fR|
5173.Fl L|
5174.Fl M \fR[
5175.Va filename
5176] (+)
5177.PD 0
5178.TP 8
5179.B history \-c \fR(+)
5180The first form prints the history event list.
5181If
5182.Va n
5183is given only the
5184.Va n
5185most recent events are printed or saved.
5186With
5187.Fl h\fR, the history list is printed without leading numbers.
5188If
5189.Va -T
5190is specified, timestamps are printed also in comment form.
5191(This can be used to
5192produce files suitable for loading with 'history \-L' or 'source \-h'.)
5193With
5194.Fl r\fR, the order of printing is most recent
5195first rather than oldest first.
5196.PD
5197.RS +8
5198.Pp
5199With
5200.Fl S\fR, the second form saves the history list to
5201.Va filename
5202If the first word of the
5203.Va savehist
5204shell variable is set to a
5205number, at most that many lines are saved.
5206If the second word of
5207.Va savehist
5208is set to
5209.Sq merge
5210, the history list is merged with the
5211existing history file instead of replacing it (if there is one) and
5212sorted by time stamp.
5213(+) Merging is intended for an environment like
5214the X Window System
5215with several shells in simultaneous use.
5216If the second word of
5217.Va savehist
5218is
5219.Sq merge
5220and the third word is set to
5221.Sq lock
5222, the history file update
5223will be serialized with other shell sessions that would possibly like
5224to merge history at exactly the same time.
5225.Pp
5226With
5227.Fl L\fR, the shell appends
5228.Va filename
5229, which is presumably a
5230history list saved by the
5231.Fl S\fR option or the
5232.Va savehist
5233mechanism,
5234to the history list.
5235.Fl M\fR is like
5236.Fl L\fR, but the contents of
5237.Va filename
5238are merged
5239into the history list and sorted by timestamp.
5240In either case,
5241.Va histfile
5242is used if
5243.Va filename
5244is not given and
5245.Va ~/.history
5246is used if
5247.Va histfile
5248is unset.
5249`history \-L' is exactly like 'source \-h' except that it does not require a
5250filename.
5251.Pp
5252Note that login shells do the equivalent of
5253.Sq history \-L
5254on startup
5255and, if
5256.Va savehist
5257is set,
5258.Sq history \-S
5259before exiting.
5260Because only
5261.Va ~/.tcshrc
5262is normally sourced before
5263.Va ~/.history
5264,
5265.Va histfile
5266should be set in
5267.Va ~/.tcshrc
5268rather than
5269.Va ~/.login
5270.Pp
5271If
5272.Va histlit
5273is set, the first and second forms print and save the literal
5274(unexpanded) form of the history list.
5275.Pp
5276The last form clears the history list.
5277.RE
5278.TP 8
5279.B hup \fR[
5280.Va command
5281] \fR(+)
5282With
5283.Va command
5284, runs
5285.Va command
5286such that it will exit on a hangup
5287signal and arranges for the shell to send it a hangup signal when the shell
5288exits.
5289Note that commands may set their own response to hangups, overriding
5290.Va hup
5291Without an argument, causes the non-interactive shell only to
5292exit on a hangup for the remainder of the script.
5293See also
5294.Va Signal handling
5295and the
5296.Va nohup
5297builtin command.
5298.TP 8
5299.B if (\fIexpr\fB) \fIcommand
5300If
5301.Va expr
5302(an expression, as described under
5303.Va Expressions
5304)
5305evaluates true, then
5306.Va command
5307is executed.
5308Variable substitution on
5309.Va command
5310happens early, at the same time it
5311does for the rest of the
5312.Va if
5313command.
5314.Va command
5315must be a simple command, not an alias, a pipeline, a command list
5316or a parenthesized command list, but it may have arguments.
5317Input/output redirection occurs even if
5318.Va expr
5319is
5320false and
5321.Va command
5322is thus
5323.Va not
5324executed; this is a bug.
5325.Pp
5326.B if (\fIexpr\fB) then
5327.br
5328\&...
5329.br
5330.B else if (\fIexpr2\fB) then
5331.br
5332\&...
5333.br
5334.B else
5335.br
5336\&...
5337.PD 0
5338.TP 8
5339.B endif
5340If the specified
5341.Va expr
5342is true then the commands to the
5343first
5344.Va else
5345are executed; otherwise if
5346.Va expr2
5347is true then
5348the commands to the second
5349.Va else
5350are executed, etc.
5351Any
5352number of
5353.Va else-if
5354pairs are possible; only one
5355.Va endif
5356is
5357needed.
5358The
5359.Va else
5360part is likewise optional.
5361(The words
5362.Va else
5363and
5364.Va endif
5365must appear at the beginning of input lines;
5366the
5367.Va if
5368must appear alone on its input line or after an
5369.Va else
5370.)
5371.PD
5372.TP 8
5373.B inlib
5374.Va shared-library
5375... (+)
5376Adds each
5377.Va shared-library
5378to the current environment.
5379There is no way
5380to remove a shared library.
5381(Domain/OS only)
5382.TP 8
5383.B jobs \fR[
5384.Fl l\fR]
5385Lists the active jobs.
5386With
5387.Fl l\fR, lists process
5388IDs in addition to the normal information.
5389On TCF systems, prints
5390the site on which each job is executing.
5391.Pp
5392.PD 0
5393.TP 8
5394.B kill \fR[
5395.Fl s
5396.Va signal
5397] \fB%
5398.Va job
5399|
5400.Va pid
5401...
5402.PD 0
5403.TP 8
5404.B kill \-l
5405The first and second forms sends the specified
5406.Va signal
5407(or, if none
5408is given, the TERM (terminate) signal) to the specified jobs or processes.
5409.Va job
5410may be a number, a string,
5411.Sq
5412,
5413.Sq %
5414,
5415.Sq +
5416or
5417.Sq \-
5418as described
5419under
5420.Va Jobs
5421Signals are either given by number or by name (as given in
5422.Va /usr/include/signal.h
5423, stripped of the prefix
5424.Sq SIG
5425).
5426There is no default
5427.Va job
5428; saying just
5429.Sq kill
5430does not send a signal
5431to the current job.
5432If the signal being sent is TERM (terminate)
5433or HUP (hangup), then the job or process is sent a
5434CONT (continue) signal as well.
5435The third form lists the signal names.
5436.PD
5437.TP 8
5438.B limit \fR[
5439.Fl h\fR] [
5440.Va resource
5441[
5442.Va maximum-use
5443]]
5444Limits the consumption by the current process and each
5445process it creates to not individually exceed
5446.Va maximum-use
5447on
5448the specified
5449.Va resource
5450If no
5451.Va maximum-use
5452is given, then
5453the current limit is printed; if no
5454.Va resource
5455is given, then
5456all limitations are given.
5457If the
5458.Fl h\fR flag is given, the
5459hard limits are used instead of the current limits.
5460The
5461hard limits impose a ceiling on the values of the current
5462limits.
5463Only the super-user may raise the hard limits, but
5464a user may lower or raise the current limits within the legal range.
5465.Pp
5466Controllable resources currently include (if supported by the OS):
5467.Bl -tag -width pseudoterminals -compact -offset indent
5468.It Va cputime
5469the maximum number of cpu-seconds to be used by each process
5470.It Va filesize
5471the largest single file which can be created
5472.It Va datasize
5473the maximum growth of the data+stack region via sbrk(2) beyond
5474the end of the program text
5475.It Va stacksize
5476the maximum size of the automatically-extended stack region
5477.It Va coredumpsize
5478the size of the largest core dump that will be created
5479.It Va memoryuse
5480the maximum amount of physical memory a process
5481may have allocated to it at a given time
5482.It Va vmemoryuse
5483the maximum amount of virtual memory a process
5484may have allocated to it at a given time (address space)
5485.It Va vmemoryuse
5486the maximum amount of virtual memory a process
5487may have allocated to it at a given time
5488.It Va heapsize
5489the maximum amount of memory a process
5490may allocate per
5491.Xr brk 2
5492system call
5493.It Va descriptors
5494or
5495.It Va openfiles
5496the maximum number of open files for this process
5497.It Va pseudoterminals
5498the maximum number of pseudo-terminals for this user
5499.It Va kqueues
5500the maximum number of kqueues allocated for this process
5501.It Va concurrency
5502the maximum number of threads for this process
5503.It Va memorylocked
5504the maximum size which a process may lock into memory using mlock(2)
5505.It Va maxproc
5506the maximum number of simultaneous processes for this user id
5507.It Va maxthread
5508the maximum number of simultaneous threads (lightweight processes) for this
5509user id
5510.It Va threads
5511the maximum number of threads for this process
5512.It Va sbsize
5513the maximum size of socket buffer usage for this user
5514.It Va swapsize
5515the maximum amount of swap space reserved or used for this user
5516.It Va maxlocks
5517the maximum number of locks for this user
5518.It Va posixlocks
5519the maximum number of POSIX advisory locks for this user
5520.It Va maxsignal
5521the maximum number of pending signals for this user
5522.It Va maxmessage
5523the maximum number of bytes in POSIX mqueues for this user
5524.It Va maxnice
5525the maximum nice priority the user is allowed to raise mapped from [19...-20]
5526to [0...39] for this user
5527.It Va maxrtprio
5528the maximum realtime priority for this user
5529.It Va maxrttime
5530the timeout for RT tasks in microseconds for this user.
5531.El
5532.Pp
5533.Va maximum-use
5534may be given as a (floating point or
5535integer) number followed by a scale factor.
5536For all limits
5537other than
5538.Va cputime
5539the default scale is
5540.Sq k
5541or
5542.Sq kilobytes
5543(1024 bytes); a scale factor of
5544.Sq m
5545or
5546.Sq megabytes
5547or
5548.Sq g
5549or
5550.Sq gigabytes
5551may also be used.
5552For
5553.Va cputime
5554the default scaling is
5555.Sq seconds ,
5556while
5557.Sq m
5558for minutes or
5559.Sq h
5560for hours, or a time of the
5561form
5562.Sq mm:ss
5563giving minutes and seconds may be used.
5564.Pp
5565If
5566.Va maximum-use
5567is
5568.Sq unlimited ,
5569then the limitation on the specified
5570.Va resource
5571is removed (this is equivalent to the
5572.Va unlimit
5573builtin command).
5574.Pp
5575For both
5576.Va resource
5577names and scale factors, unambiguous
5578prefixes of the names suffice.
5579.RE
5580.TP 8
5581.B log \fR(+)
5582Prints the
5583.Va watch
5584shell variable and reports on each user indicated
5585in
5586.Va watch
5587who is logged in, regardless of when they last logged in.
5588See also
5589.Va watchlog
5590.TP 8
5591.B login
5592Terminates a login shell, replacing it with an instance of
5593.Va /bin/login
5594. This is one way to log off, included for
5595compatibility with
5596.Xr sh 1 .
5597.TP 8
5598.B logout
5599Terminates a login shell.
5600Especially useful if
5601.Va ignoreeof
5602is set.
5603.TP 8
5604.B ls\-F \fR[\-
5605.Va switch
5606...] [
5607.Va file
5608...] (+)
5609Lists files like
5610.Sq ls \-F
5611, but much faster.
5612It identifies each type of
5613special file in the listing with a special character:
5614.Bl -tag -width x -offset indent -compact
5615.It Dv /
5616Directory
5617.It Dv *
5618Executable
5619.It Dv #
5620Block device
5621.It Dv %
5622Character device
5623.It Dv |
5624Named pipe (systems with named pipes only)
5625.It Dv =
5626Socket (systems with sockets only)
5627.It Dv @
5628Symbolic link (systems with symbolic links only)
5629.It Dv +
5630Hidden directory (AIX only) or context dependent (HP/UX only)
5631.It Dv :
5632Network special (HP/UX only)
5633.El
5634.Pp
5635If the
5636.Va listlinks
5637shell variable is set, symbolic links are identified
5638in more detail (on only systems that have them, of course):
5639.Pp
5640.PD 0
5641.TP 4
5642@
5643Symbolic link to a non-directory
5644.TP 4
5645>
5646Symbolic link to a directory
5647.TP 4
5648&
5649Symbolic link to nowhere
5650.PD
5651.Pp
5652.Va listlinks
5653also slows down \fIls\-F\fR and causes partitions holding
5654files pointed to by symbolic links to be mounted.
5655.Pp
5656If the
5657.Va listflags
5658shell variable is set to
5659.Sq x
5660,
5661.Sq a
5662or
5663.Sq A
5664, or any
5665combination thereof (e.g.,
5666.Sq xA
5667), they are used as flags to \fIls\-F\fR,
5668making it act like
5669.Sq ls \-xF
5670,
5671.Sq ls \-Fa
5672,
5673.Sq ls \-FA
5674or a combination
5675(e.g.,
5676.Sq ls \-FxA
5677).
5678On machines where
5679.Sq ls \-C
5680is not the default, \fIls\-F\fR acts like
5681.Sq ls \-CF
5682,
5683unless
5684.Va listflags
5685contains an
5686.Sq x
5687, in which case it acts like
5688.Sq ls \-xF
5689\fIls\-F\fR passes its arguments to
5690.Va ls
5691(1) if it is given any switches,
5692so
5693.Sq alias ls ls\-F
5694generally does the right thing.
5695.Pp
5696The \fBls\-F\fR builtin can list files using different colors depending on the
5697filetype or extension.
5698See the
5699.Va color
5700shell variable and the
5701.Va LS_COLORS
5702environment variable.
5703.RE
5704.Pp
5705.B migrate \fR[
5706.Fl
5707.Va site
5708]
5709.Va pid
5710|\fB%
5711.Va jobid
5712... (+)
5713.PD 0
5714.TP 8
5715.B migrate \-
5716.Va site
5717(+)
5718The first form migrates the process or job to the site specified or the
5719default site determined by the system path.
5720The second form is equivalent to
5721.Sq migrate \-
5722.Va site
5723$$
5724: it migrates the
5725current process to the specified site.
5726Migrating the shell
5727itself can cause unexpected behavior, because the shell
5728does not like to lose its tty.
5729(TCF only)
5730.PD
5731.TP 8
5732.B newgrp \fR[
5733.Fl \fR]
5734.Va [group]
5735(+)
5736Equivalent to
5737.Sq exec newgrp
5738; see
5739.Va newgrp
5740(1).
5741Available only if the shell was so compiled;
5742see the
5743.Va version
5744shell variable.
5745.TP 8
5746.B nice \fR[\fB+
5747.Va number
5748] [
5749.Va command
5750]
5751Sets the scheduling priority for the shell to
5752.Va number
5753, or, without
5754.Va number
5755, to 4.
5756With
5757.Va command ,
5758runs
5759.Va command
5760at the appropriate
5761priority.
5762The greater the
5763.Va number
5764, the less cpu
5765the process gets.
5766The super-user may specify negative
5767priority by using
5768.Sq nice \-number ...
5769Command is always
5770executed in a sub-shell, and the restrictions placed on
5771commands in simple
5772.Va if
5773statements apply.
5774.TP 8
5775.B nohup \fR[
5776.Va command
5777]
5778With
5779.Va command
5780, runs
5781.Va command
5782such that it will ignore hangup signals.
5783Note that commands may set their own response to hangups, overriding
5784.Va nohup
5785Without an argument, causes the non-interactive shell only to
5786ignore hangups for the remainder of the script.
5787See also
5788.Va Signal handling
5789and the
5790.Va hup
5791builtin command.
5792.TP 8
5793.B notify \fR[\fB%
5794.Va job
5795...]
5796Causes the shell to notify the user asynchronously when the status of any
5797of the specified jobs (or, without %
5798.Va job
5799, the current job) changes,
5800instead of waiting until the next prompt as is usual.
5801.Va job
5802may be a number, a string,
5803.Sq
5804,
5805.Sq %
5806,
5807.Sq +
5808or
5809.Sq \-
5810as described
5811under
5812.Va Jobs
5813See also the
5814.Va notify
5815shell variable.
5816.TP 8
5817.B onintr \fR[
5818.Fl \fR|
5819.Va label
5820]
5821Controls the action of the shell on interrupts.
5822Without arguments,
5823restores the default action of the shell on interrupts,
5824which is to terminate shell scripts or to return to the
5825terminal command input level.
5826With
5827.Sq \-
5828, causes all interrupts to be ignored.
5829With
5830.Va label
5831, causes the shell to execute a
5832.Sq goto
5833.Va label
5834when an interrupt is received or a child process terminates because it was
5835interrupted.
5836.IP "" 8
5837.Va onintr
5838is ignored if the shell is running detached and in system
5839startup files (see
5840.Va FILES
5841), where interrupts are disabled anyway.
5842.TP 8
5843.B popd \fR[
5844.Fl p\fR] [
5845.Fl l\fR] [
5846.Fl n\fR|
5847.Fl v\fR] \fR[\fB+
5848.Va n
5849]
5850Without arguments, pops the directory stack and returns to the new top directory.
5851With a number
5852.Sq +
5853.Va n
5854, discards the
5855.Va n
5856'th entry in the stack.
5857.IP "" 8
5858Finally, all forms of
5859.Va popd
5860print the final directory stack,
5861just like
5862.Va dirs
5863The
5864.Va pushdsilent
5865shell variable can be set to
5866prevent this and the
5867.Fl p\fR flag can be given to override
5868.Va pushdsilent
5869The
5870.Fl l\fR,
5871.Fl n\fR and
5872.Fl v\fR flags have the same effect on
5873.Va popd
5874as on
5875.Va dirs
5876(+)
5877.TP 8
5878.B printenv \fR[
5879.Va name
5880] (+)
5881Prints the names and values of all environment variables or,
5882with
5883.Va name
5884, the value of the environment variable
5885.Va name
5886.TP 8
5887.B pushd \fR[
5888.Fl p\fR] [
5889.Fl l\fR] [
5890.Fl n\fR|
5891.Fl v\fR] [
5892.Va name
5893|\fB+
5894.Va n
5895]
5896Without arguments, exchanges the top two elements of the directory stack.
5897If
5898.Va pushdtohome
5899is set,
5900.Va pushd
5901without arguments does
5902.Sq pushd ~
5903,
5904like
5905.Va cd
5906(+)
5907With
5908.Va name
5909, pushes the current working directory onto the directory
5910stack and changes to
5911.Va name
5912If
5913.Va name
5914is
5915.Sq \-
5916it is interpreted as the previous working directory
5917(see
5918.Va Filename substitution
5919).
5920(+)
5921If
5922.Va dunique
5923is set,
5924.Va pushd
5925removes any instances of
5926.Va name
5927from the stack before pushing it onto the stack.
5928(+)
5929With a number
5930.Sq +
5931.Va n
5932, rotates the
5933.Va n
5934th element of the
5935directory stack around to be the top element and changes to it.
5936If
5937.Va dextract
5938is set, however,
5939.Sq pushd +
5940.Va n
5941extracts the
5942.Va n
5943th
5944directory, pushes it onto the top of the stack and changes to it.
5945(+)
5946.IP "" 8
5947Finally, all forms of
5948.Va pushd
5949print the final directory stack,
5950just like
5951.Va dirs
5952The
5953.Va pushdsilent
5954shell variable can be set to
5955prevent this and the
5956.Fl p\fR flag can be given to override
5957.Va pushdsilent
5958The
5959.Fl l\fR,
5960.Fl n\fR and
5961.Fl v\fR flags have the same effect on
5962.Va pushd
5963as on
5964.Va dirs
5965(+)
5966.TP 8
5967.B rehash
5968Causes the internal hash table of the contents of the
5969directories in the
5970.Va path
5971variable to be recomputed.
5972This is
5973needed if the
5974.Va autorehash
5975shell variable is not set and new
5976commands are added to directories in
5977.Va path
5978while you are logged
5979in.
5980With
5981.Va autorehash
5982, a new command will be found
5983automatically, except in the special case where another command of
5984the same name which is located in a different directory already
5985exists in the hash table.
5986Also flushes the cache of home directories
5987built by tilde expansion.
5988.TP 8
5989.B repeat \fIcount command
5990The specified
5991.Va command
5992,
5993which is subject to the same restrictions as the
5994.Va command
5995in the one line
5996.Va if
5997statement above, is executed
5998.Va count
5999times.
6000I/O redirections occur exactly once, even if
6001.Va count
6002is 0.
6003.TP 8
6004.B rootnode //
6005.Va nodename
6006(+)
6007Changes the rootnode to //
6008.Va nodename
6009, so that
6010.Sq /
6011will be interpreted
6012as
6013.Sq //
6014.Va nodename
6015(Domain/OS only)
6016.Pp
6017.B sched \fR(+)
6018.br
6019.B sched \fR[
6020.Va +
6021]
6022.Va hh:mm command
6023\fR(+)
6024.PD 0
6025.TP 8
6026.B sched \-
6027.Va n
6028(+)
6029The first form prints the scheduled-event list.
6030The
6031.Va sched
6032shell variable may be set to define the format in which
6033the scheduled-event list is printed.
6034The second form adds
6035.Va command
6036to the scheduled-event list.
6037For example,
6038.PD
6039.RS +8
6040.IP "" 4
6041> sched 11:00 echo It\e's eleven o\e'clock.
6042.Pp
6043causes the shell to echo
6044.Sq It's eleven o'clock .
6045at 11 AM.
6046The time may be in 12-hour AM/PM format
6047.IP "" 4
6048.\" TODO
6049> sched 5pm set prompt='[%h] It\e's after 5; go home: >'
6050.Pp
6051or may be relative to the current time:
6052.IP "" 4
6053> sched +2:15 /usr/lib/uucp/uucico \-r1 \-sother
6054.Pp
6055A relative time specification may not use AM/PM format.
6056The third form removes item
6057.Va n
6058from the event list:
6059.Bd -literal -offset indent
6060> sched
6061	1  Wed Apr  4 15:42  /usr/lib/uucp/uucico \-r1 \-sother
6062	2  Wed Apr  4 17:00  set prompt=[%h] It's after 5; go home: >
6063> sched \-2
6064> sched
6065	1  Wed Apr  4 15:42  /usr/lib/uucp/uucico \-r1 \-sother
6066.Ed
6067.Pp
6068A command in the scheduled-event list is executed just before the first
6069prompt is printed after the time when the command is scheduled.
6070It is possible to miss the exact time when the command is to be run, but
6071an overdue command will execute at the next prompt.
6072A command which comes due while the shell
6073is waiting for user input is executed immediately.
6074However, normal operation of an already-running command will not
6075be interrupted so that a scheduled-event list element may be run.
6076.Pp
6077This mechanism is similar to, but not the same as, the
6078.Va at
6079(1)
6080command on some Unix systems.
6081Its major disadvantage is that it may not run a command at exactly the
6082specified time.
6083Its major advantage is that because
6084.Va sched
6085runs directly from
6086the shell, it has access to shell variables and other structures.
6087This provides a mechanism for changing one's working environment
6088based on the time of day.
6089.RE
6090.Pp
6091.B set
6092.br
6093.B set
6094.Va name
6095...
6096.br
6097.B set
6098.Va name
6099\fB=
6100.Va word
6101...
6102.br
6103.B set [\-r] [\-f|\-l]
6104.Va name
6105\fB=(\fIwordlist
6106.Va )
6107... (+)
6108.br
6109.B set
6110.Va name[index]
6111\fB=
6112.Va word
6113...
6114.br
6115.B set \-r \fR(+)
6116.br
6117.B set \-r
6118.Va name
6119... (+)
6120.PD 0
6121.TP 8
6122.B set \-r
6123.Va name
6124\fB=
6125.Va word
6126... (+)
6127The first form of the command prints the value of all shell variables.
6128Variables which contain more than a single word print as a
6129parenthesized word list.
6130The second form sets
6131.Va name
6132to the null string.
6133The third form sets
6134.Va name
6135to the single
6136.Va word
6137The fourth form sets
6138.Va name
6139to the list of words in
6140.Va wordlist
6141In all cases the value is command and filename expanded.
6142If
6143.Fl r\fR is specified, the value is set read-only.
6144If
6145.Fl f\fR or
6146.Fl l\fR are specified, set only unique words keeping their order.
6147.Fl f\fR prefers the first occurrence of a word, and
6148.Fl l\fR the last.
6149The fifth form sets the
6150.Va index
6151'th component of
6152.Va name
6153to
6154.Va word
6155;
6156this component must already exist.
6157The sixth form lists only the names of all shell variables that are read-only.
6158The seventh form makes
6159.Va name
6160read-only, whether or not it has a value.
6161The eighth form is the same as the third form, but
6162make
6163.Va name
6164read-only at the same time.
6165.PD
6166.IP "" 8
6167These arguments can be repeated to set and/or make read-only multiple variables
6168in a single set command.
6169Note, however, that variable expansion
6170happens for all arguments before any setting occurs.
6171Note also that
6172.Sq =
6173can
6174be adjacent to both
6175.Va name
6176and
6177.Va word
6178or separated from both by
6179whitespace, but cannot be adjacent to only one or the other.
6180See also the
6181.Va unset
6182builtin command.
6183.TP 8
6184.B setenv \fR[
6185.Va name
6186[
6187.Va value
6188]]
6189Without arguments, prints the names and values of all environment variables.
6190Given
6191.Va name
6192, sets the environment variable
6193.Va name
6194to
6195.Va value
6196or, without
6197.Va value
6198, to the null string.
6199.TP 8
6200.B setpath
6201.Va path
6202(+)
6203Equivalent to
6204.Va setpath
6205(1).
6206(Mach only)
6207.TP 8
6208.B setspath\fR LOCAL|
6209.Va site
6210|
6211.Va cpu
6212...
6213(+)
6214Sets the system execution path.
6215(TCF only)
6216.TP 8
6217.B settc
6218.Va cap value
6219(+)
6220Tells the shell to believe that the terminal capability
6221.Va cap
6222(as defined in
6223.Va termcap
6224(5)) has the value
6225.Va value
6226No sanity checking is done.
6227Concept terminal users may have to
6228.Sq settc xn no
6229to get proper
6230wrapping at the rightmost column.
6231.TP 8
6232.B setty \fR[
6233.Fl d\fR|
6234.Fl q\fR|
6235.Fl x\fR] [
6236.Fl a\fR] [[
6237.Va +
6238|
6239.Fl \fR]
6240.Va mode
6241] (+)
6242Controls which tty modes (see
6243.Va Terminal management
6244)
6245the shell does not allow to change.
6246.Fl d\fR,
6247.Fl q\fR or
6248.Fl x\fR tells
6249.Va setty
6250to act
6251on the
6252.Sq edit
6253,
6254.Sq quote
6255or
6256.Sq execute
6257set of tty modes respectively; without
6258.Fl d\fR,
6259.Fl q\fR or
6260.Fl x\fR,
6261.Sq execute
6262is used.
6263.IP "" 8
6264Without other arguments,
6265.Va setty
6266lists the modes in the chosen set
6267which are fixed on (`+mode') or off (`\-mode').
6268The available modes, and thus the display, vary from system to system.
6269With
6270.Fl a\fR, lists all tty modes in the chosen set
6271whether or not they are fixed.
6272With \fB+
6273.Va mode
6274,
6275.Fl
6276.Va mode
6277or
6278.Va mode
6279, fixes
6280.Va mode
6281on or off
6282or removes control from
6283.Va mode
6284in the chosen set.
6285For example,
6286.Sq setty +echok echoe
6287fixes
6288.Sq echok
6289mode on and allows commands
6290to turn
6291.Sq echoe
6292mode on or off, both when the shell is executing commands.
6293.TP 8
6294.B setxvers\fR [
6295.Va string
6296] (+)
6297Set the experimental version prefix to
6298.Va string
6299, or removes it
6300if
6301.Va string
6302is omitted.
6303(TCF only)
6304.TP 8
6305.B shift \fR[
6306.Va variable
6307]
6308Without arguments, discards
6309.Va argv
6310[1] and shifts the members of
6311.Va argv
6312to the left.
6313It is an error for
6314.Va argv
6315not to be set or to have
6316less than one word as value.
6317With
6318.Va variable
6319, performs the
6320same function on
6321.Va variable
6322.TP 8
6323.B source \fR[
6324.Fl h\fR]
6325.Va name
6326[
6327.Va args
6328...]
6329The shell reads and executes commands from
6330.Va name
6331The commands are not placed on the history list.
6332If any
6333.Va args
6334are given, they are placed in
6335.Va argv
6336(+)
6337.Va source
6338commands may be nested;
6339if they are nested too deeply the shell may run out of file descriptors.
6340An error in a
6341.Va source
6342at any level terminates all nested
6343.Va source
6344commands.
6345With
6346.Fl h\fR, commands are placed on the history list instead of being
6347executed, much like
6348.Sq history \-L
6349.TP 8
6350.B stop \fB%
6351.Va job
6352|
6353.Va pid
6354...
6355Stops the specified jobs or processes which are executing in the background.
6356.Va job
6357may be a number, a string,
6358.Sq
6359,
6360.Sq %
6361,
6362.Sq +
6363or
6364.Sq \-
6365as described
6366under
6367.Va Jobs
6368There is no default
6369.Va job
6370; saying just
6371.Sq stop
6372does not stop
6373the current job.
6374.TP 8
6375.B suspend
6376Causes the shell to stop in its tracks, much as if it had
6377been sent a stop signal with
6378.Va ^Z
6379This is most often used to
6380stop shells started by
6381.Va su
6382(1).
6383.Pp
6384.B switch (\fIstring\fB)
6385.br
6386.B case \fIstr1\fB:
6387.PD 0
6388.IP "" 4
6389\&...
6390.br
6391.B breaksw
6392.Pp
6393\&...
6394.Pp
6395.B default:
6396.IP "" 4
6397\&...
6398.br
6399.B breaksw
6400.TP 8
6401.B endsw
6402Each case label is successively matched, against the
6403specified
6404.Va string
6405which is first command and filename expanded.
6406The file metacharacters
6407.Sq *
6408,
6409.Sq \&?
6410and
6411.Sq [...]
6412may be used
6413in the case labels, which are variable expanded.
6414If none
6415of the labels match before a
6416.Sq default
6417label is found, then
6418the execution begins after the default label.
6419Each case
6420label and the default label must appear at the beginning of
6421a line.
6422The command
6423.Va breaksw
6424causes execution to continue
6425after the
6426.Va endsw
6427Otherwise control may fall through case
6428labels and default labels as in C.
6429If no label matches and
6430there is no default, execution continues after the
6431.Va endsw
6432.PD
6433.TP 8
6434.B telltc \fR(+)
6435Lists the values of all terminal capabilities (see
6436.Va termcap
6437(5)).
6438.TP 8
6439.B termname \fR[
6440.Va terminal type
6441] \fR(+)
6442Tests if
6443.Va terminal type
6444(or the current value of
6445.Va TERM
6446if no
6447.Va terminal type
6448is given) has an entry in the hosts termcap(5) or
6449terminfo(5) database. Prints the terminal type to stdout and returns 0
6450if an entry is present otherwise returns 1.
6451.TP 8
6452.B time \fR[
6453.Va command
6454]
6455Executes
6456.Va command
6457(which must be a simple command, not an alias,
6458a pipeline, a command list or a parenthesized command list)
6459and prints a time summary as described under the
6460.Va time
6461variable.
6462If necessary, an extra shell is created to print the time statistic when
6463the command completes.
6464Without
6465.Va command
6466, prints a time summary for the current shell and its
6467children.
6468.TP 8
6469.B umask \fR[
6470.Va value
6471]
6472Sets the file creation mask to
6473.Va value
6474, which is given in octal.
6475Common values for the mask are
6476002, giving all access to the group and read and execute access to others, and
6477022, giving read and execute access to the group and others.
6478Without
6479.Va value
6480, prints the current file creation mask.
6481.TP 8
6482.B unalias
6483.Va pattern
6484.br
6485Removes all aliases whose names match
6486.Va pattern
6487`unalias *' thus removes all aliases.
6488It is not an error for nothing to be
6489.Va unalias
6490ed.
6491.TP 8
6492.B uncomplete
6493.Va pattern
6494(+)
6495Removes all completions whose names match
6496.Va pattern
6497`uncomplete *' thus removes all completions.
6498It is not an error for nothing to be
6499.Va uncomplete
6500d.
6501.TP 8
6502.B unhash
6503Disables use of the internal hash table to speed location of
6504executed programs.
6505.TP 8
6506.B universe
6507.Va universe
6508(+)
6509Sets the universe to
6510.Va universe
6511(Masscomp/RTU only)
6512.TP 8
6513.B unlimit \fR[
6514.Fl hf\fR] [
6515.Va resource
6516]
6517Removes the limitation on
6518.Va resource
6519or, if no
6520.Va resource
6521is
6522specified, all
6523.Va resource
6524limitations.
6525With
6526.Fl h\fR, the corresponding hard limits are removed.
6527Only the super-user may do this.
6528Note that
6529.Va unlimit
6530may not exit successful, since most systems
6531do not allow
6532.Va descriptors
6533to be unlimited.
6534With
6535.Fl f\fR errors are ignored.
6536.TP 8
6537.B unset \fIpattern
6538Removes all variables whose names match
6539.Va pattern
6540, unless they are read-only.
6541`unset *' thus removes all variables unless they are read-only;
6542this is a bad idea.
6543It is not an error for nothing to be
6544.Va unset
6545.TP 8
6546.B unsetenv \fIpattern
6547Removes all environment variables whose names match
6548.Va pattern
6549`unsetenv *' thus removes all environment variables;
6550this is a bad idea.
6551It is not an error for nothing to be
6552.Va unsetenv
6553ed.
6554.TP 8
6555.B ver \fR[
6556.Va systype
6557[
6558.Va command
6559]] (+)
6560Without arguments, prints
6561.Va SYSTYPE
6562With
6563.Va systype
6564, sets
6565.Va SYSTYPE
6566to
6567.Va systype
6568With
6569.Va systype
6570and
6571.Va command
6572, executes
6573.Va command
6574under
6575.Va systype
6576.Va systype
6577may be
6578.Sq bsd4.3
6579or
6580.Sq sys5.3
6581(Domain/OS only)
6582.TP 8
6583.B wait
6584The shell waits for all background jobs.
6585If the shell is interactive, an
6586interrupt will disrupt the wait and cause the shell to print the names and job
6587numbers of all outstanding jobs.
6588.TP 8
6589.B warp
6590.Va universe
6591(+)
6592Sets the universe to
6593.Va universe
6594(Convex/OS only)
6595.TP 8
6596.B watchlog \fR(+)
6597An alternate name for the
6598.Va log
6599builtin command (q.v.).
6600Available only if the shell was so compiled;
6601see the
6602.Va version
6603shell variable.
6604.TP 8
6605.B where
6606.Va command
6607(+)
6608Reports all known instances of
6609.Va command
6610, including aliases, builtins and
6611executables in
6612.Va path
6613.TP 8
6614.B which\fR
6615.Va command
6616(+)
6617Displays the command that will be executed by the shell after substitutions,
6618.Va path
6619searching, etc.
6620The builtin command is just like
6621.Va which
6622(1), but it correctly reports
6623.Nm
6624aliases and builtins and is 10 to 100 times faster.
6625See also the
6626.Va which-command
6627editor command.
6628.Pp
6629.B while (\fIexpr
6630.Va )
6631.br
6632\&...
6633.PD 0
6634.TP 8
6635.B end
6636Executes the commands between the
6637.Va while
6638and the matching
6639.Va end
6640while
6641.Va expr
6642(an expression, as described under
6643.Va Expressions
6644)
6645evaluates non-zero.
6646.Va while
6647and
6648.Va end
6649must appear alone on their input lines.
6650.Va break
6651and
6652.Va continue
6653may be used to terminate or continue the
6654loop prematurely.
6655If the input is a terminal, the user is prompted the first time
6656through the loop as with
6657.Va foreach
6658.PD
6659.Ss "Special aliases (+)"
6660If set, each of these aliases executes automatically at the indicated time.
6661They are all initially undefined.
6662.TP 8
6663.B beepcmd
6664Runs when the shell wants to ring the terminal bell.
6665.TP 8
6666.B cwdcmd
6667Runs after every change of working directory.
6668For example, if the user is
6669working on an X window system using
6670.Va xterm
6671(1) and a re-parenting window
6672manager that supports title bars such as
6673.Va twm
6674(1) and does
6675.RS +8
6676.IP "" 4
6677> alias cwdcmd  'echo \-n "^[]2;${HOST}:$cwd ^G"'
6678.Pp
6679then the shell will change the title of the running
6680.Va xterm
6681(1)
6682to be the name of the host, a colon, and the full current working directory.
6683A fancier way to do that is
6684.IP "" 4
6685> alias cwdcmd 'echo \-n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
6686.Pp
6687This will put the hostname and working directory on the title bar but
6688only the hostname in the icon manager menu.
6689.Pp
6690Note that putting a
6691.Va cd
6692,
6693.Va pushd
6694or
6695.Va popd
6696in
6697.Va cwdcmd
6698may cause an infinite loop.
6699It is the author's opinion that anyone doing
6700so will get what they deserve.
6701.RE
6702.TP 8
6703.B jobcmd
6704Runs before each command gets executed, or when the command changes state.
6705This is similar to
6706.Va postcmd
6707, but it does not print builtins.
6708.RS +8
6709.IP "" 4
6710> alias jobcmd  'echo \-n "^[]2\e;\e!#:q^G"'
6711.Pp
6712then executing
6713.Va vi foo.c
6714will put the command string in the xterm title bar.
6715.RE
6716.TP 8
6717.B helpcommand
6718Invoked by the
6719.Va run-help
6720editor command.
6721The command name for which help
6722is sought is passed as sole argument.
6723For example, if one does
6724.RS +8
6725.IP "" 4
6726> alias helpcommand '\e!:1 --help'
6727.Pp
6728then the help display of the command itself will be invoked, using the GNU
6729help calling convention.
6730Currently there is no easy way to account for various calling conventions (e.g.,
6731the customary Unix
6732.Sq -h
6733), except by using a table of many commands.
6734.RE
6735.TP 8
6736.B periodic
6737Runs every
6738.Va tperiod
6739minutes.
6740This provides a convenient means for
6741checking on common but infrequent changes such as new mail.
6742For example,
6743if one does
6744.RS +8
6745.IP "" 4
6746> set tperiod = 30
6747.br
6748> alias periodic checknews
6749.Pp
6750then the
6751.Va checknews
6752(1) program runs every 30 minutes.
6753If
6754.Va periodic
6755is set but
6756.Va tperiod
6757is unset or set to 0,
6758.Va periodic
6759behaves like
6760.Va precmd
6761.RE
6762.TP 8
6763.B precmd
6764Runs just before each prompt is printed.
6765For example, if one does
6766.RS +8
6767.IP "" 4
6768> alias precmd date
6769.Pp
6770then
6771.Va date
6772(1) runs just before the shell prompts for each command.
6773There are no limits on what
6774.Va precmd
6775can be set to do, but discretion
6776should be used.
6777.RE
6778.TP 8
6779.B postcmd
6780Runs before each command gets executed.
6781.RS +8
6782.IP "" 4
6783> alias postcmd  'echo \-n "^[]2\e;\e!#:q^G"'
6784.Pp
6785then executing
6786.Va vi foo.c
6787will put the command string in the xterm title bar.
6788.RE
6789.TP 8
6790.B shell
6791Specifies the interpreter for executable scripts which do not themselves
6792specify an interpreter.
6793The first word should be a full path name to the
6794desired interpreter (e.g.,
6795.Sq /bin/csh
6796or
6797.Sq /usr/local/bin/tcsh
6798).
6799.Ss "Special shell variables"
6800The variables described in this section have special meaning to the shell.
6801.Pp
6802The shell sets
6803.Va addsuffix ,
6804.Va argv ,
6805.Va autologout ,
6806.Va csubstnonl ,
6807.Va command ,
6808.Va echo_style ,
6809.Va edit ,
6810.Va gid ,
6811.Va group ,
6812.Va home ,
6813.Va loginsh ,
6814.Va oid ,
6815.Va path ,
6816.Va prompt ,
6817.Va prompt2 ,
6818.Va prompt3 ,
6819.Va shell ,
6820.Va shlvl ,
6821.Va tcsh ,
6822.Va term ,
6823.Va tty ,
6824.Va uid ,
6825.Va user
6826and
6827.Va version
6828at
6829startup; they do not change thereafter unless changed by the user.
6830The shell updates
6831.Va cwd ,
6832.Va dirstack ,
6833.Va owd
6834and
6835.Va status
6836when necessary,
6837and sets
6838.Va logout
6839on logout.
6840.Pp
6841The shell synchronizes
6842.Va group ,
6843.Va home ,
6844.Va path ,
6845.Va shlvl ,
6846.Va term and
6847.Va user
6848with the environment variables of the same names:
6849whenever the environment variable changes the shell changes the corresponding
6850shell variable to match (unless the shell variable is read-only) and vice
6851versa.
6852Note that although
6853.Va cwd
6854and
6855.Va PWD
6856have identical meanings, they
6857are not synchronized in this manner, and that the shell automatically
6858converts between the different formats of
6859.Va path
6860and
6861.Va PATH
6862.TP 8
6863.B addsuffix \fR(+)
6864If set, filename completion adds
6865.Sq /
6866to the end of directories and a space
6867to the end of normal files when they are matched exactly.
6868Set by default.
6869.TP 8
6870.B afsuser \fR(+)
6871If set,
6872.Va autologout
6873's autolock feature uses its value instead of
6874the local username for kerberos authentication.
6875.TP 8
6876.B ampm \fR(+)
6877If set, all times are shown in 12-hour AM/PM format.
6878.TP 8
6879.B anyerror \fR(+)
6880This variable selects what is propagated to the value of the
6881.Va status
6882variable. For more information see the description of the
6883.Va status
6884variable below.
6885.TP 8
6886.B argv
6887The arguments to the shell.
6888Positional parameters are taken from
6889.Va argv
6890,
6891i.e.,
6892.Sq $1
6893is replaced by
6894.Sq $argv[1]
6895, etc.
6896Set by default, but usually empty in interactive shells.
6897.TP 8
6898.B autocorrect \fR(+)
6899If set, the
6900.Va spell-word
6901editor command is invoked automatically before
6902each completion attempt.
6903.TP 8
6904.B autoexpand \fR(+)
6905If set, the
6906.Va expand-history
6907editor command is invoked automatically
6908before each completion attempt. If this is set to
6909.Va onlyhistory
6910, then
6911only history will be expanded and a second completion will expand filenames.
6912.TP 8
6913.B autolist \fR(+)
6914If set, possibilities are listed after an ambiguous completion.
6915If set to
6916.Sq ambiguous
6917, possibilities are listed only when no new
6918characters are added by completion.
6919.TP 8
6920.B autologout \fR(+)
6921The first word is the number of minutes of inactivity before automatic
6922logout.
6923The optional second word is the number of minutes of inactivity
6924before automatic locking.
6925When the shell automatically logs out, it prints
6926.Sq auto-logout
6927, sets the
6928variable
6929.Va logout
6930to
6931.Sq automatic
6932and exits.
6933When the shell automatically locks, the user is required to enter his password
6934to continue working.
6935Five incorrect attempts result in automatic logout.
6936Set to
6937.Sq 60
6938(automatic logout after 60 minutes, and no locking) by default
6939in login and superuser shells, but not if the shell thinks it is running
6940under a window system (i.e., the
6941.Va DISPLAY
6942environment variable is set),
6943the tty is a pseudo-tty (pty) or the shell was not so compiled (see the
6944.Va version
6945shell variable).
6946See also the
6947.Va afsuser
6948and
6949.Va logout
6950shell variables.
6951.TP 8
6952.B autorehash \fR(+)
6953If set, the internal hash table of the contents of the directories in the
6954.Va path
6955variable will be recomputed if a command is not found in the hash
6956table.
6957In addition, the list of available commands will be rebuilt for each
6958command completion or spelling correction attempt if set to
6959.Sq complete
6960or
6961`correct' respectively; if set to
6962.Sq always
6963, this will be done for both
6964cases.
6965.TP 8
6966.B backslash_quote \fR(+)
6967.\" TODO
6968If set, backslashes (`\e') always quote
6969.Sq \e
6970,
6971.Sq \&' ,
6972and
6973.Sq \&"
6974This may make
6975complex quoting tasks easier, but it can cause syntax errors in
6976.Xr csh 1
6977scripts.
6978.TP 8
6979.B catalog
6980The file name of the message catalog.
6981If set, tcsh use
6982.Sq tcsh.${catalog}
6983as a message catalog instead of
6984default
6985.Sq tcsh
6986.TP 8
6987.B cdpath
6988A list of directories in which
6989.Va cd
6990should search for
6991subdirectories if they aren't found in the current directory.
6992.TP 8
6993.B cdtohome \fR(+)
6994If not set,
6995.Va cd
6996requires a directory
6997.Va name
6998, and will not go to the
6999.Va home
7000directory if it's omitted.
7001This is set by default.
7002.TP 8
7003.B color
7004If set, it enables color display for the builtin \fBls\-F\fR and it passes
7005.Fl \-color=auto\fR to
7006.Va ls
7007Alternatively, it can be set to only
7008\fBls\-F\fR or only
7009.Va ls
7010to enable color to only one command.
7011Setting
7012it to nothing is equivalent to setting it to \fB(ls\-F ls)\fR.
7013.TP 8
7014.B colorcat
7015If set, it enables color escape sequence for NLS message files.
7016And display colorful NLS messages.
7017.TP 8
7018.B command \fR(+)
7019If set, the command which was passed to the shell with the
7020.Va -c
7021flag (q.v.).
7022.TP 8
7023.B compat_expr \fR(+)
7024If set, the shell will evaluate expressions right to left, like the original
7025.Xr csh 1
7026.TP 8
7027.B complete \fR(+)
7028If set to
7029.Sq igncase
7030, the completion becomes case insensitive.
7031If set to
7032.Sq enhance
7033, completion ignores case and considers
7034hyphens and underscores to be equivalent; it will also treat
7035periods, hyphens and underscores (`.',
7036.Sq \-
7037and
7038.Sq _
7039) as word
7040separators.
7041If set to
7042.Sq Enhance
7043, completion matches uppercase and underscore
7044characters explicitly and matches lowercase and hyphens in a
7045case-insensitive manner; it will treat periods, hyphens and underscores
7046as word separators.
7047.TP 8
7048.B continue \fR(+)
7049If set to a list of commands, the shell will continue the listed
7050commands, instead of starting a new one.
7051.TP 8
7052.B continue_args \fR(+)
7053Same as continue, but the shell will execute:
7054.RS +8
7055.IP "" 4
7056echo \`pwd\` $argv > ~/.<cmd>_pause; %<cmd>
7057.RE
7058.TP 8
7059.B correct \fR(+)
7060If set to
7061.Sq cmd
7062, commands are automatically spelling-corrected.
7063If set to
7064.Sq complete
7065, commands are automatically completed.
7066If set to
7067.Sq all
7068, the entire command line is corrected.
7069.TP 8
7070.B csubstnonl \fR(+)
7071If set, newlines and carriage returns in command substitution are
7072replaced by spaces.
7073Set by default.
7074.TP 8
7075.B cwd
7076The full pathname of the current directory.
7077See also the
7078.Va dirstack
7079and
7080.Va owd
7081shell variables.
7082.TP 8
7083.B dextract \fR(+)
7084If set,
7085.Sq pushd +
7086.Va n
7087extracts the
7088.Va n
7089th directory from the directory
7090stack rather than rotating it to the top.
7091.TP 8
7092.B dirsfile \fR(+)
7093The default location in which
7094.Sq dirs \-S
7095and
7096.Sq dirs \-L
7097look for
7098a history file.
7099If unset,
7100.Va ~/.cshdirs
7101is used.
7102Because only
7103.Va ~/.tcshrc
7104is normally sourced before
7105.Va ~/.cshdirs
7106,
7107.Va dirsfile
7108should be set in
7109.Va ~/.tcshrc
7110rather than
7111.Va ~/.login
7112.TP 8
7113.B dirstack \fR(+)
7114An array of all the directories on the directory stack.
7115`$dirstack[1]' is the current working directory,
7116.Sq $dirstack[2]
7117the first directory on the stack, etc.
7118Note that the current working directory is
7119.Sq $dirstack[1]
7120but
7121.Sq =0
7122in
7123directory stack substitutions, etc.
7124One can change the stack arbitrarily by setting
7125.Va dirstack
7126,
7127but the first element (the current working directory) is always correct.
7128See also the
7129.Va cwd
7130and
7131.Va owd
7132shell variables.
7133.TP 8
7134.B dspmbyte \fR(+)
7135Has an effect iff 'dspm' is listed as part of the
7136.Va version
7137shell variable.
7138If set to
7139.Sq euc
7140, it enables display and editing EUC-kanji(Japanese) code.
7141If set to
7142.Sq sjis
7143, it enables display and editing Shift-JIS(Japanese) code.
7144If set to
7145.Sq big5
7146, it enables display and editing Big5(Chinese) code.
7147If set to
7148.Sq utf8
7149, it enables display and editing Utf8(Unicode) code.
7150If set to the following format, it enables display and editing of original
7151multi-byte code format:
7152.RS +8
7153.IP "" 4
7154> set dspmbyte = 0000....(256 bytes)....0000
7155.Pp
7156The table requires
7157.Va just
7158256 bytes.
7159Each character of 256 characters
7160corresponds (from left to right) to the ASCII codes 0x00, 0x01, ... 0xff.
7161Each
7162character
7163.\" (position in this table?)
7164is set to number 0,1,2 and 3.
7165Each number has the following meaning:
7166.br
71670 ... not used for multi-byte characters.
7168.br
71691 ... used for the first byte of a multi-byte character.
7170.br
71712 ... used for the second byte of a multi-byte character.
7172.br
71733 ... used for both the first byte and second byte of a multi-byte character.
7174.\" SHK: I tried my best to get the following to be grammatically correct.
7175.\" However, I still don't understand what's going on here.
7176In the
7177.\" following example, there are three bytes, but the text seems to refer to
7178.\" each nybble as a character.
7179What's going on here?  It this 3-byte code
7180.\" in the table?  The text above seems to imply that there are 256
7181.\" characters/bytes in the table.
7182If I get some more info on this (perhaps
7183.\" a complete example), I could fix the text to be grammatically correct.
7184.\" (steve.kelem@xilinx.com 1999/09/13)
7185.Pp
7186Example:
7187.br
7188If set to
7189.Sq 001322
7190, the first character (means 0x00 of the ASCII code) and
7191second character (means 0x01 of ASCII code) are set to
7192.Sq 0
7193Then, it is not
7194used for multi-byte characters.
7195The 3rd character (0x02) is set to '1',
7196indicating that it is used for the first byte of a multi-byte character.
7197The 4th character(0x03) is set '3'.
7198It is used for both the first byte and
7199the second byte of a multi-byte character.
7200The 5th and 6th characters
7201(0x04,0x05) are set to '2', indicating that they are used for the second
7202byte of a multi-byte character.
7203.Pp
7204The GNU fileutils version of ls cannot display multi-byte
7205filenames without the -N ( --literal ) option.
7206If you are using
7207this version, set the second word of dspmbyte to "ls".
7208If not, for
7209example, "ls-F -l" cannot display multi-byte filenames.
7210.Pp
7211Note:
7212.br
7213This variable can only be used if KANJI and DSPMBYTE has been defined at
7214compile time.
7215.RE
7216.TP 8
7217.B dunique \fR(+)
7218If set,
7219.Va pushd
7220removes any instances of
7221.Va name
7222from the stack before pushing it onto the stack.
7223.TP 8
7224.B echo
7225If set, each command with its arguments is echoed just before it is
7226executed.
7227For non-builtin commands all expansions occur before
7228echoing.
7229Builtin commands are echoed before command and filename
7230substitution, because these substitutions are then done selectively.
7231Set by the
7232.Fl x\fR command line option.
7233.TP 8
7234.B echo_style \fR(+)
7235The style of the
7236.Va echo
7237builtin.
7238May be set to
7239.Pp
7240.RS +8
7241.PD 0
7242.TP 8
7243bsd
7244Don't echo a newline if the first argument is
7245.Sq \-n ;
7246the default for
7247.Xr csh 1
7248.TP 8
7249sysv
7250Recognize backslashed escape sequences in echo strings.
7251.TP 8
7252both
7253Recognize both the
7254.Sq \-n
7255flag and backslashed escape sequences; the default
7256for
7257.Nm
7258.TP 8
7259none
7260Recognize neither.
7261.PD
7262.Pp
7263Set by default to the local system default.
7264The BSD and System V
7265options are described in the
7266.Va echo
7267(1) man pages on the appropriate
7268systems.
7269.RE
7270.TP 8
7271.B edit \fR(+)
7272If set, the command-line editor is used.
7273Set by default in interactive
7274shells.
7275.TP 8
7276.B editors \fR(+)
7277A list of command names for the
7278.Va run-fg-editor
7279editor command to match.
7280If not set, the
7281.Va EDITOR
7282(`ed' if unset) and
7283.Va VISUAL
7284(`vi' if unset)
7285environment variables will be used instead.
7286.TP 8
7287.B ellipsis \fR(+)
7288If set, the
7289.Sq %c
7290/`%.' and
7291.Sq %C
7292prompt sequences (see the
7293.Va prompt
7294shell variable) indicate skipped directories with an ellipsis (`...')
7295instead of
7296.Sq /<skipped>
7297.TP 8
7298.B euid \fR(+)
7299The user's effective user ID.
7300.TP 8
7301.B euser \fR(+)
7302The first matching passwd entry name corresponding to the effective user ID.
7303.TP 8
7304.B fignore \fR(+)
7305Lists file name suffixes to be ignored by completion.
7306.TP 8
7307.B filec
7308In
7309.Nm
7310, completion is always used and this variable is ignored
7311by default. If
7312.B edit
7313is unset, then the traditional
7314.Xr csh 1
7315completion is used.
7316If set in
7317.Xr csh 1
7318, filename completion is used.
7319.TP 8
7320.B gid \fR(+)
7321The user's real group ID.
7322.TP 8
7323.B globdot \fR(+)
7324If set, wild-card glob patterns will match files and directories beginning
7325with
7326.Sq .
7327except for
7328.Sq .
7329and
7330.Sq ..
7331.TP 8
7332.B globstar \fR(+)
7333If set, the
7334.Sq **
7335and
7336.Sq ***
7337file glob patterns will match any string of
7338characters including
7339.Sq /
7340traversing any existing sub-directories.
7341(e.g.
7342`ls **.c' will list all the .c files in the current directory tree).
7343If used by itself, it will match zero or more sub-directories
7344(e.g.
7345.Sq ls /usr/include/**/time.h
7346will list any file named
7347.Sq time.h
7348in the /usr/include directory tree; whereas
7349.Sq ls /usr/include/**time.h
7350will match any file in the /usr/include directory tree ending in
7351.Sq time.h
7352).
7353To prevent problems with recursion, the
7354.Sq **
7355glob-pattern will not
7356descend into a symbolic link containing a directory.
7357To override this,
7358use
7359.Sq ***
7360.TP 8
7361.B group \fR(+)
7362The user's group name.
7363.TP 8
7364.B highlight
7365If set, the incremental search match (in
7366.Va i-search-back
7367and
7368.Va i-search-fwd
7369) and the region between the mark and the cursor are
7370highlighted in reverse video.
7371.IP "" 8
7372Highlighting requires more frequent terminal writes, which introduces extra
7373overhead. If you care about terminal performance, you may want to leave this
7374unset.
7375.TP 8
7376.B histchars
7377A string value determining the characters used in \fBHistory
7378substitution\fR (q.v.).
7379The first character of its value is used as
7380the history substitution character, replacing the default character
7381`!'.
7382The second character of its value replaces the character
7383.Sq ^
7384in
7385quick substitutions.
7386.TP 8
7387.B histdup \fR(+)
7388Controls handling of duplicate entries in the history list.
7389If set to
7390`all' only unique history events are entered in the history list.
7391If
7392set to
7393.Sq prev
7394and the last history event is the same as the current
7395command, then the current command is not entered in the history.
7396If
7397set to
7398.Sq erase
7399and the same event is found in the history list, that
7400old event gets erased and the current one gets inserted.
7401Note that the
7402`prev' and
7403.Sq all
7404options renumber history events so there are no gaps.
7405.TP 8
7406.B histfile \fR(+)
7407The default location in which
7408.Sq history \-S
7409and
7410.Sq history \-L
7411look for
7412a history file.
7413If unset,
7414.Va ~/.history
7415is used.
7416.Va histfile
7417is
7418useful when sharing the same home directory between different machines,
7419or when saving separate histories on different terminals.
7420Because only
7421.Va ~/.tcshrc
7422is normally sourced before
7423.Va ~/.history
7424,
7425.Va histfile
7426should be set in
7427.Va ~/.tcshrc
7428rather than
7429.Va ~/.login
7430.TP 8
7431.B histlit \fR(+)
7432If set, builtin and editor commands and the
7433.Va savehist
7434mechanism
7435use the literal (unexpanded) form of lines in the history list.
7436See
7437also the
7438.Va toggle-literal-history
7439editor command.
7440.TP 8
7441.B history
7442The first word indicates the number of history events to save.
7443The
7444optional second word (+) indicates the format in which history is
7445printed; if not given,
7446.Sq %h\et%T\et%R\en
7447is used.
7448The format sequences
7449are described below under
7450.Va prompt
7451; note the variable meaning of
7452`%R'.
7453Set to
7454.Sq 100
7455by default.
7456.TP 8
7457.B home
7458Initialized to the home directory of the invoker.
7459The filename
7460expansion of
7461.Sq
7462.Va ~
7463refers to this variable.
7464.TP 8
7465.B ignoreeof
7466If set to the empty string or
7467.Sq 0
7468and the input device is a terminal,
7469the
7470.Va end-of-file
7471command (usually generated by the user by typing
7472`^D' on an empty line) causes the shell to print `Use "exit" to leave
7473tcsh.' instead of exiting.
7474This prevents the shell from accidentally
7475being killed.
7476Historically this setting exited after 26 successive
7477EOF's to avoid infinite loops.
7478If set to a number
7479.Va n
7480, the shell
7481ignores
7482.Va n - 1
7483consecutive
7484.Va end-of-file
7485s and exits on the
7486.Va n
7487th.
7488(+) If unset,
7489.Sq 1
7490is used, i.e., the shell exits on a
7491single
7492.Sq ^D
7493.TP 8
7494.B implicitcd \fR(+)
7495If set, the shell treats a directory name typed as a command as though
7496it were a request to change to that directory.
7497If set to
7498.Va verbose
7499,
7500the change of directory is echoed to the standard output.
7501This behavior
7502is inhibited in non-interactive shell scripts, or for command strings
7503with more than one word.
7504Changing directory takes precedence over
7505executing a like-named command, but it is done after alias
7506substitutions.
7507Tilde and variable expansions work as expected.
7508.TP 8
7509.B inputmode \fR(+)
7510If set to
7511.Sq insert
7512or
7513.Sq overwrite
7514, puts the editor into that input mode
7515at the beginning of each line.
7516.TP 8
7517.B killdup \fR(+)
7518Controls handling of duplicate entries in the kill ring.
7519If set to
7520`all' only unique strings are entered in the kill ring.
7521If set to
7522`prev' and the last killed string is the same as the current killed
7523string, then the current string is not entered in the ring.
7524If set
7525to
7526.Sq erase
7527and the same string is found in the kill ring, the old
7528string is erased and the current one is inserted.
7529.TP 8
7530.B killring \fR(+)
7531Indicates the number of killed strings to keep in memory.
7532Set to
7533.Sq 30
7534by default.
7535If unset or set to less than
7536.Sq 2
7537, the shell will only
7538keep the most recently killed string.
7539Strings are put in the killring by the editor commands that delete
7540(kill) strings of text, e.g.
7541.Va backward-delete-word
7542,
7543.Va kill-line
7544, etc, as well as the
7545.Va copy-region-as-kill
7546command.
7547The
7548.Va yank
7549editor command will yank the most recently killed string
7550into the command-line, while
7551.Va yank-pop
7552(see
7553.Va Editor commands
7554)
7555can be used to yank earlier killed strings.
7556.TP 8
7557.B listflags \fR(+)
7558If set to
7559.Sq x
7560,
7561.Sq a
7562or
7563.Sq A
7564, or any combination thereof (e.g.,
7565.Sq xA
7566), they
7567are used as flags to \fIls\-F\fR, making it act like
7568.Sq ls \-xF
7569, `ls
7570\-Fa',
7571.Sq ls \-FA
7572or a combination (e.g.,
7573.Sq ls \-FxA
7574):
7575.Sq a
7576shows all
7577files (even if they start with a
7578.Sq .
7579),
7580.Sq A
7581shows all files but
7582.Sq .
7583and
7584`..', and
7585.Sq x
7586sorts across instead of down.
7587If the second word of
7588.Va listflags
7589is set, it is used as the path to
7590.Sq ls(1)
7591.TP 8
7592.B listjobs \fR(+)
7593If set, all jobs are listed when a job is suspended.
7594If set to
7595.Sq long
7596,
7597the listing is in long format.
7598.TP 8
7599.B listlinks \fR(+)
7600If set, the \fIls\-F\fR builtin command shows the type of file to which
7601each symbolic link points.
7602.TP 8
7603.B listmax \fR(+)
7604The maximum number of items which the
7605.Va list-choices
7606editor command
7607will list without asking first.
7608.TP 8
7609.B listmaxrows \fR(+)
7610The maximum number of rows of items which the
7611.Va list-choices
7612editor
7613command will list without asking first.
7614.TP 8
7615.B loginsh \fR(+)
7616Set by the shell if it is a login shell.
7617Setting or unsetting it
7618within a shell has no effect.
7619See also
7620.Va shlvl
7621.TP 8
7622.B logout \fR(+)
7623Set by the shell to
7624.Sq normal
7625before a normal logout,
7626.Sq automatic
7627before
7628an automatic logout, and
7629.Sq hangup
7630if the shell was killed by a hangup
7631signal (see
7632.Va Signal handling
7633).
7634See also the
7635.Va autologout
7636shell variable.
7637.TP 8
7638.B mail
7639A list of files and directories to check for incoming mail, optionally
7640preceded by a numeric word.
7641Before each prompt, if 10 minutes have
7642passed since the last check, the shell checks each file and says `You
7643have new mail.' (or, if
7644.Va mail
7645contains multiple files, `You have
7646new mail in
7647.Va name
7648.') if the filesize is greater than zero in size
7649and has a modification time greater than its access time.
7650.Pp
7651.RS +8
7652.PD
7653.Pp
7654If you are in a login shell, then no mail file is reported unless it has
7655been modified after the time the shell has started up, to prevent
7656redundant notifications.
7657Most login programs will tell you whether or not
7658you have mail when you log in.
7659.Pp
7660If a file specified in
7661.Va mail
7662is a directory, the shell will count each
7663file within that directory as a separate message, and will report `You have
7664.Va n
7665mails.' or
7666.Sq You have
7667.Va n
7668mails in
7669.Va name
7670as appropriate.
7671This functionality is provided primarily for those systems which store mail
7672in this manner, such as the Andrew Mail System.
7673.Pp
7674If the first word of
7675.Va mail
7676is numeric it is taken as a different mail
7677checking interval, in seconds.
7678.Pp
7679Under very rare circumstances, the shell may report
7680.Sq You have mail.
7681instead
7682of
7683.Sq You have new mail.
7684.RE
7685.TP 8
7686.B matchbeep \fR(+)
7687If set to
7688.Sq never
7689, completion never beeps.
7690If set to
7691.Sq nomatch
7692, it beeps only when there is no match.
7693If set to
7694.Sq ambiguous
7695, it beeps when there are multiple matches.
7696If set to
7697.Sq notunique
7698, it beeps when there is one exact and other longer matches.
7699If unset,
7700.Sq ambiguous
7701is used.
7702.TP 8
7703.B nobeep \fR(+)
7704If set, beeping is completely disabled.
7705See also
7706.Va visiblebell
7707.TP 8
7708.B noclobber
7709If set, restrictions are placed on output redirection to insure that files
7710are not accidentally destroyed and that
7711.Sq >>
7712redirections refer to existing
7713files, as described in the
7714.Va Input/output
7715section.
7716.TP 8
7717.B noding
7718If set, disable the printing of
7719.Sq DING!
7720in the
7721.Va prompt
7722time
7723specifiers at the change of hour.
7724.TP 8
7725.B noglob
7726If set,
7727.Va Filename substitution
7728and
7729.Va Directory stack substitution
7730(q.v.) are inhibited.
7731This is most useful in shell scripts which do not deal
7732with filenames, or after a list of filenames has been obtained and further
7733expansions are not desirable.
7734.TP 8
7735.B nokanji \fR(+)
7736If set and the shell supports Kanji (see the
7737.Va version
7738shell variable),
7739it is disabled so that the meta key can be used.
7740.TP 8
7741.B nonomatch
7742If set, a
7743.Va Filename substitution
7744or
7745.Va Directory stack substitution
7746(q.v.) which does not match any
7747existing files is left untouched rather than causing an error.
7748It is still an error for the substitution to be
7749malformed, e.g.,
7750.Sq echo [
7751still gives an error.
7752.TP 8
7753.B nostat \fR(+)
7754A list of directories (or glob-patterns which match directories; see
7755.Va Filename substitution
7756) that should not be
7757.Va stat
7758(2)ed during a
7759completion operation.
7760This is usually used to exclude directories which
7761take too much time to
7762.Va stat
7763(2), for example
7764.Va /afs
7765.TP 8
7766.B notify
7767If set, the shell announces job completions asynchronously.
7768The default is to present job completions just before printing a prompt.
7769.TP 8
7770.B oid \fR(+)
7771The user's real organization ID.
7772(Domain/OS only)
7773.TP 8
7774.B owd \fR(+)
7775The old working directory, equivalent to the
7776.Sq \-
7777used by
7778.Va cd
7779and
7780.Va pushd
7781See also the
7782.Va cwd
7783and
7784.Va dirstack
7785shell variables.
7786.TP 8
7787.B padhour
7788If set, enable the printing of padding '0' for hours, in 24 and 12 hour
7789formats.
7790E.G.: 07:45:42 vs. 7:45:42.
7791.TP 8
7792.B parseoctal
7793To retain compatibily with older versions numeric variables starting with
77940 are not interpreted as octal. Setting this variable enables proper octal
7795parsing.
7796.TP 8
7797.B path
7798A list of directories in which to look for executable commands.
7799A null word specifies the current directory.
7800If there is no
7801.Va path
7802variable then only full path names will execute.
7803.Va path
7804is set by the shell at startup from the
7805.Va PATH
7806environment
7807variable or, if
7808.Va PATH
7809does not exist, to a system-dependent default
7810something like
7811.Sq (/usr/local/bin /usr/bsd /bin /usr/bin .)
7812The shell may put
7813.Sq .
7814first or last in
7815.Va path
7816or omit it entirely
7817depending on how it was compiled; see the
7818.Va version
7819shell variable.
7820A shell which is given neither the
7821.Fl c\fR nor the
7822.Fl t\fR option
7823hashes the contents of the directories in
7824.Va path
7825after
7826reading
7827.Va ~/.tcshrc
7828and each time
7829.Va path
7830is reset.
7831If one adds a new command to a directory in
7832.Va path
7833while the shell
7834is active, one may need to do a
7835.Va rehash
7836for the shell to find it.
7837.TP 8
7838.B printexitvalue \fR(+)
7839If set and an interactive program exits with a non-zero status, the shell
7840prints
7841.Sq Exit
7842.Va status
7843.TP 8
7844.B prompt
7845The string which is printed before reading each command from the terminal.
7846.Va prompt
7847may include any of the following formatting sequences (+), which
7848are replaced by the given information:
7849.Pp
7850.RS +8
7851.PD 0
7852.TP 4
7853%/
7854The current working directory.
7855.TP 4
7856%~
7857The current working directory, but with one's home directory
7858represented by
7859.Sq ~
7860and other users' home directories represented by
7861`~user' as per
7862.Va Filename substitution
7863`~user' substitution
7864happens only if the shell has already used
7865.Sq ~
7866.Va user
7867in a pathname
7868in the current session.
7869.TP 4
7870%c[[0]
7871.Va n
7872], %.[[0]
7873.Va n
7874]
7875The trailing component of the current working directory, or
7876.Va n
7877trailing components if a digit
7878.Va n
7879is given.
7880If
7881.Va n
7882begins with
7883.Sq 0
7884, the number of skipped components precede
7885the trailing component(s) in the format
7886.Sq /<
7887.Va skipped
7888>trailing
7889If the
7890.Va ellipsis
7891shell variable is set, skipped components
7892are represented by an ellipsis so the whole becomes
7893.Sq ...trailing
7894`~' substitution is done as in
7895.Sq %~
7896above, but the
7897.Sq ~
7898component
7899is ignored when counting trailing components.
7900.TP 4
7901%C
7902Like %c, but without
7903.Sq ~
7904substitution.
7905.TP 4
7906%h, %!, !
7907The current history event number.
7908.TP 4
7909%M
7910The full hostname.
7911.TP 4
7912%m
7913The hostname up to the first
7914.Sq .
7915.TP 4
7916%S (%s)
7917Start (stop) standout mode.
7918.TP 4
7919%B (%b)
7920Start (stop) boldfacing mode.
7921.TP 4
7922%U (%u)
7923Start (stop) underline mode.
7924.TP 4
7925%t, %@
7926The time of day in 12-hour AM/PM format.
7927.TP 4
7928%T
7929Like
7930.Sq %t
7931, but in 24-hour format (but see the
7932.Va ampm
7933shell variable).
7934.TP 4
7935%p
7936The
7937.Sq precise
7938time of day in 12-hour AM/PM format, with seconds.
7939.TP 4
7940%P
7941Like
7942.Sq %p
7943, but in 24-hour format (but see the
7944.Va ampm
7945shell variable).
7946.TP 4
7947\e
7948.Va c
7949.Va c
7950is parsed as in
7951.Va bindkey
7952.TP 4
7953^
7954.Va c
7955.Va c
7956is parsed as in
7957.Va bindkey
7958.TP 4
7959%%
7960A single
7961.Sq %
7962.TP 4
7963%n
7964The user name.
7965.TP 4
7966%N
7967The effective user name.
7968.TP 4
7969%j
7970The number of jobs.
7971.TP 4
7972%d
7973The weekday in
7974.Sq Day
7975format.
7976.TP 4
7977%D
7978The day in
7979.Sq dd
7980format.
7981.TP 4
7982%w
7983The month in
7984.Sq Mon
7985format.
7986.TP 4
7987%W
7988The month in
7989.Sq mm
7990format.
7991.TP 4
7992%y
7993The year in
7994.Sq yy
7995format.
7996.TP 4
7997%Y
7998The year in
7999.Sq yyyy
8000format.
8001.TP 4
8002%l
8003The shell's tty.
8004.TP 4
8005%L
8006Clears from the end of the prompt to end of the display or the end of the line.
8007.TP 4
8008%$
8009Expands the shell or environment variable name immediately after the
8010.Sq $
8011.TP 4
8012%#
8013`>' (or the first character of the
8014.Va promptchars
8015shell variable)
8016for normal users,
8017.Sq #
8018(or the second character of
8019.Va promptchars
8020)
8021for the superuser.
8022.TP 4
8023%{
8024.Va string
8025%}
8026Includes
8027.Va string
8028as a literal escape sequence.
8029It should be used only to change terminal attributes and
8030should not move the cursor location.
8031This
8032cannot be the last sequence in
8033.Va prompt
8034.TP 4
8035%?
8036The return code of the command executed just before the prompt.
8037.TP 4
8038%R
8039In
8040.Va prompt2
8041, the status of the parser.
8042In
8043.Va prompt3
8044, the corrected string.
8045In
8046.Va history
8047, the history string.
8048.PD
8049.Pp
8050`%B',
8051.Sq %S
8052,
8053.Sq %U
8054and
8055.Sq %{
8056.Va string
8057%}
8058are available in only
8059eight-bit-clean shells; see the
8060.Va version
8061shell variable.
8062.Pp
8063The bold, standout and underline sequences are often used to distinguish a
8064superuser shell.
8065For example,
8066.IP "" 4
8067> set prompt = "%m [%h] %B[%@]%b [%/] you rang? "
8068.br
8069tut [37]
8070.Va [2:54pm]
8071[/usr/accts/sys] you rang? _
8072.Pp
8073If
8074.Sq %t
8075,
8076.Sq %@
8077,
8078.Sq %T
8079,
8080.Sq %p
8081, or
8082.Sq %P
8083is used, and
8084.Va noding
8085is not set,
8086then print
8087.Sq DING!
8088on the change of hour (i.e,
8089.Sq \&:00
8090minutes) instead of
8091the actual time.
8092.Pp
8093Set by default to
8094.Sq %#
8095in interactive shells.
8096.RE
8097.TP 8
8098.B prompt2 \fR(+)
8099The string with which to prompt in
8100.Va while
8101and
8102.Va foreach
8103loops and
8104after lines ending in
8105.Sq \e
8106The same format sequences may be used as in
8107.Va prompt
8108(q.v.);
8109note the variable meaning of
8110.Sq %R
8111Set by default to
8112.Sq %R?
8113in interactive shells.
8114.TP 8
8115.B prompt3 \fR(+)
8116The string with which to prompt when confirming automatic spelling correction.
8117The same format sequences may be used as in
8118.Va prompt
8119(q.v.);
8120note the variable meaning of
8121.Sq %R
8122Set by default to
8123.Sq CORRECT>%R (y|n|e|a)?
8124in interactive shells.
8125.TP 8
8126.B promptchars \fR(+)
8127If set (to a two-character string), the
8128.Sq %#
8129formatting sequence in the
8130.Va prompt
8131shell variable is replaced with the first character for
8132normal users and the second character for the superuser.
8133.TP 8
8134.B pushdtohome \fR(+)
8135If set,
8136.Va pushd
8137without arguments does
8138.Sq pushd ~
8139, like
8140.Va cd
8141.TP 8
8142.B pushdsilent \fR(+)
8143If set,
8144.Va pushd
8145and
8146.Va popd
8147do not print the directory stack.
8148.TP 8
8149.B recexact \fR(+)
8150If set, completion completes on an exact match even if a longer match is
8151possible.
8152.TP 8
8153.B recognize_only_executables \fR(+)
8154If set, command listing displays only files in the path that are
8155executable.
8156Slow.
8157.TP 8
8158.B rmstar \fR(+)
8159If set, the user is prompted before
8160.Sq rm *
8161is executed.
8162.TP 8
8163.B rprompt \fR(+)
8164The string to print on the right-hand side of the screen (after
8165the command input) when the prompt is being displayed on the left.
8166It recognizes the same formatting characters as
8167.Va prompt
8168It will automatically disappear and reappear as necessary, to ensure that
8169command input isn't obscured, and will appear only if the prompt,
8170command input, and itself will fit together on the first line.
8171If
8172.Va edit
8173isn't set, then
8174.Va rprompt
8175will be printed after
8176the prompt and before the command input.
8177.TP 8
8178.B savedirs \fR(+)
8179If set, the shell does
8180.Sq dirs \-S
8181before exiting.
8182If the first word is set to a number, at most that many directory stack
8183entries are saved.
8184.TP 8
8185.B savehist
8186If set, the shell does
8187.Sq history \-S
8188before exiting.
8189If the first word is set to a number, at most that many lines are saved.
8190(The number should be less than or equal to the number
8191.Va history
8192entries;
8193if it is set to greater than the number of
8194.Va history
8195settings, only
8196.Va history
8197entries will be saved)
8198If the second word is set to
8199.Sq merge
8200, the history list is merged with
8201the existing history file instead of replacing it (if there is one) and
8202sorted by time stamp and the most recent events are retained.
8203If the second word of
8204.Va savehist
8205is
8206.Sq merge
8207and the third word is set to
8208`lock', the history file update will be serialized with other shell sessions
8209that would possibly like to merge history at exactly the same time. (+)
8210.TP 8
8211.B sched \fR(+)
8212The format in which the
8213.Va sched
8214builtin command prints scheduled events;
8215if not given,
8216.Sq %h\et%T\et%R\en
8217is used.
8218The format sequences are described above under
8219.Va prompt
8220;
8221note the variable meaning of
8222.Sq %R
8223.TP 8
8224.B shell
8225The file in which the shell resides.
8226This is used in forking
8227shells to interpret files which have execute bits set, but
8228which are not executable by the system.
8229(See the description
8230of
8231.Va Builtin and non-builtin command execution
8232.)  Initialized to the
8233(system-dependent) home of the shell.
8234.TP 8
8235.B shlvl \fR(+)
8236The number of nested shells.
8237Reset to 1 in login shells.
8238See also
8239.Va loginsh
8240.TP 8
8241.B status
8242The exit status from the last command or backquote expansion, or any
8243command in a pipeline is propagated to
8244.Va status
8245(This is also the
8246default
8247.Xr csh 1
8248behavior.)
8249This default does not match what POSIX mandates (to return the
8250status of the last command only). To match the POSIX behavior, you need
8251to unset
8252.Va anyerror
8253.RS +8
8254.Pp
8255If the
8256.Va anyerror
8257variable is unset, the exit status of a pipeline
8258is determined only from the last command in the pipeline, and the exit
8259status of a backquote expansion is
8260.Va not
8261propagated to
8262.Va status
8263.Pp
8264If a command terminated abnormally, then 0200 is added to the status.
8265Builtin commands which fail return exit status
8266.Sq 1
8267, all other builtin
8268commands return status
8269.Sq 0
8270.RE
8271.TP 8
8272.B symlinks \fR(+)
8273Can be set to several different values to control symbolic link (`symlink')
8274resolution:
8275.RS +8
8276.Pp
8277If set to
8278.Sq chase
8279, whenever the current directory changes to a directory
8280containing a symbolic link, it is expanded to the real name of the directory
8281to which the link points.
8282This does not work for the user's home directory;
8283this is a bug.
8284.Pp
8285If set to
8286.Sq ignore
8287, the shell tries to construct a current directory
8288relative to the current directory before the link was crossed.
8289This means that
8290.Va cd
8291ing through a symbolic link and then
8292.Sq cd ..
8293ing
8294returns one to the original directory.
8295This affects only builtin commands
8296and filename completion.
8297.Pp
8298If set to
8299.Sq expand
8300, the shell tries to fix symbolic links by actually expanding
8301arguments which look like path names.
8302This affects any command, not just
8303builtins.
8304Unfortunately, this does not work for hard-to-recognize filenames,
8305such as those embedded in command options.
8306Expansion may be prevented by
8307quoting.
8308While this setting is usually the most convenient, it is sometimes
8309misleading and sometimes confusing when it fails to recognize an argument
8310which should be expanded.
8311A compromise is to use
8312.Sq ignore
8313and use the
8314editor command
8315.Va normalize-path
8316(bound by default to ^X-n) when necessary.
8317.Pp
8318Some examples are in order.
8319First, let's set up some play directories:
8320.IP "" 4
8321> cd /tmp
8322.br
8323> mkdir from from/src to
8324.br
8325> ln \-s from/src to/dst
8326.Pp
8327Here's the behavior with
8328.Va symlinks
8329unset,
8330.IP "" 4
8331> cd /tmp/to/dst; echo $cwd
8332.br
8333/tmp/to/dst
8334.br
8335> cd ..; echo $cwd
8336.br
8337/tmp/from
8338.Pp
8339here's the behavior with
8340.Va symlinks
8341set to
8342.Sq chase
8343,
8344.IP "" 4
8345> cd /tmp/to/dst; echo $cwd
8346.br
8347/tmp/from/src
8348.br
8349> cd ..; echo $cwd
8350.br
8351/tmp/from
8352.Pp
8353here's the behavior with
8354.Va symlinks
8355set to
8356.Sq ignore
8357,
8358.IP "" 4
8359> cd /tmp/to/dst; echo $cwd
8360.br
8361/tmp/to/dst
8362.br
8363> cd ..; echo $cwd
8364.br
8365/tmp/to
8366.Pp
8367and here's the behavior with
8368.Va symlinks
8369set to
8370.Sq expand
8371.IP "" 4
8372> cd /tmp/to/dst; echo $cwd
8373.br
8374/tmp/to/dst
8375.br
8376> cd ..; echo $cwd
8377.br
8378/tmp/to
8379.br
8380> cd /tmp/to/dst; echo $cwd
8381.br
8382/tmp/to/dst
8383.br
8384> cd ".."; echo $cwd
8385.br
8386/tmp/from
8387.br
8388> /bin/echo ..
8389.br
8390/tmp/to
8391.br
8392> /bin/echo ".."
8393.br
8394\&..
8395.Pp
8396Note that
8397.Sq expand
8398expansion 1) works just like
8399.Sq ignore
8400for builtins
8401like
8402.Va cd
8403, 2) is prevented by quoting, and 3) happens before
8404filenames are passed to non-builtin commands.
8405.RE
8406.TP 8
8407.B tcsh \fR(+)
8408The version number of the shell in the format
8409.Sq R.VV.Pp
8410,
8411where
8412.Sq R
8413is the major release number,
8414.Sq VV
8415the current version
8416and
8417.Sq PP
8418the patchlevel.
8419.TP 8
8420.B term
8421The terminal type.
8422Usually set in
8423.Va ~/.login
8424as described under
8425.Va Startup and shutdown
8426.TP 8
8427.B time
8428If set to a number, then the
8429.Va time
8430builtin (q.v.) executes automatically
8431after each command which takes more than that many CPU seconds.
8432If there is a second word, it is used as a format string for the output
8433of the
8434.Va time
8435builtin.
8436(u) The following sequences may be used in the
8437format string:
8438.Pp
8439.RS +8
8440.PD 0
8441.TP 4
8442%U
8443The time the process spent in user mode in cpu seconds.
8444.TP 4
8445%S
8446The time the process spent in kernel mode in cpu seconds.
8447.TP 4
8448%E
8449The elapsed (wall clock) time in seconds.
8450.TP 4
8451%P
8452The CPU percentage computed as (%U + %S) / %E.
8453.TP 4
8454%W
8455Number of times the process was swapped.
8456.TP 4
8457%X
8458The average amount in (shared) text space used in Kbytes.
8459.TP 4
8460%D
8461The average amount in (unshared) data/stack space used in Kbytes.
8462.TP 4
8463%K
8464The total space used (%X + %D) in Kbytes.
8465.TP 4
8466%M
8467The maximum memory the process had in use at any time in Kbytes.
8468.TP 4
8469%F
8470The number of major page faults (page needed to be brought from disk).
8471.TP 4
8472%R
8473The number of minor page faults.
8474.TP 4
8475%I
8476The number of input operations.
8477.TP 4
8478%O
8479The number of output operations.
8480.TP 4
8481%r
8482The number of socket messages received.
8483.TP 4
8484%s
8485The number of socket messages sent.
8486.TP 4
8487%k
8488The number of signals received.
8489.TP 4
8490%w
8491The number of voluntary context switches (waits).
8492.TP 4
8493%c
8494The number of involuntary context switches.
8495.PD
8496.Pp
8497Only the first four sequences are supported on systems without BSD resource
8498limit functions.
8499The default time format is
8500.Sq %Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww
8501for
8502systems that support resource usage reporting and
8503.Sq %Uu %Ss %E %P
8504for
8505systems that do not.
8506.Pp
8507Under Sequent's DYNIX/ptx, %X, %D, %K, %r and %s are not
8508available, but the following additional sequences are:
8509.Pp
8510.PD 0
8511.TP 4
8512%Y
8513The number of system calls performed.
8514.TP 4
8515%Z
8516The number of pages which are zero-filled on demand.
8517.TP 4
8518%i
8519The number of times a process's resident set size was increased by the kernel.
8520.TP 4
8521%d
8522The number of times a process's resident set size was decreased by the kernel.
8523.TP 4
8524%l
8525The number of read system calls performed.
8526.TP 4
8527%m
8528The number of write system calls performed.
8529.TP 4
8530%p
8531The number of reads from raw disk devices.
8532.TP 4
8533%q
8534The number of writes to raw disk devices.
8535.PD
8536.Pp
8537and the default time format is
8538.Sq %Uu %Ss %E %P %I+%Oio %Fpf+%Ww
8539Note that the CPU percentage can be higher than 100% on multi-processors.
8540.RE
8541.TP 8
8542.B tperiod \fR(+)
8543The period, in minutes, between executions of the
8544.Va periodic
8545special alias.
8546.TP 8
8547.B tty \fR(+)
8548The name of the tty, or empty if not attached to one.
8549.TP 8
8550.B uid \fR(+)
8551The user's real user ID.
8552.TP 8
8553.B user
8554The user's login name.
8555.TP 8
8556.B verbose
8557If set, causes the words of each
8558command to be printed, after history substitution (if any).
8559Set by the
8560.Fl v\fR command line option.
8561.TP 8
8562.B version \fR(+)
8563The version ID stamp.
8564It contains the shell's version number (see
8565.Va tcsh
8566),
8567origin, release date, vendor, operating system and machine (see
8568.Va VENDOR
8569,
8570.Va OSTYPE
8571and
8572.Va MACHTYPE
8573) and a comma-separated
8574list of options which were set at compile time.
8575Options which are set by default in the distribution are noted.
8576.Pp
8577.RS +8
8578.PD 0
8579.TP 6
85808b
8581The shell is eight bit clean; default
8582.TP 6
85837b
8584The shell is not eight bit clean
8585.TP 6
8586wide
8587The shell is multibyte encoding clean (like UTF-8)
8588.TP 6
8589nls
8590The system's NLS is used; default for systems with NLS
8591.TP 6
8592lf
8593Login shells execute
8594.Va /etc/csh.login
8595before instead of after
8596.Va /etc/csh.cshrc
8597and
8598.Va ~/.login
8599before instead of after
8600.Va ~/.tcshrc
8601and
8602.Va ~/.history
8603.TP 6
8604dl
8605`.' is put last in
8606.Va path
8607for security; default
8608.TP 6
8609nd
8610`.' is omitted from
8611.Va path
8612for security
8613.TP 6
8614vi
8615.Va vi
8616(1)\-style editing is the default rather than
8617.Va emacs
8618(1)\-style
8619.TP 6
8620dtr
8621Login shells drop DTR when exiting
8622.TP 6
8623bye
8624.Va bye
8625is a synonym for
8626.Va logout
8627and
8628.Va log
8629is an alternate name for
8630.Va watchlog
8631.TP 6
8632al
8633.Va autologout
8634is enabled; default
8635.TP 6
8636kan
8637Kanji is used if appropriate according to locale settings,
8638unless the
8639.Va nokanji
8640shell variable is set
8641.TP 6
8642sm
8643The system's
8644.Va malloc
8645(3) is used
8646.TP 6
8647hb
8648The
8649.Sq #!<program> <args>
8650convention is emulated when executing shell scripts
8651.TP 6
8652ng
8653The
8654.Va newgrp
8655builtin is available
8656.TP 6
8657rh
8658The shell attempts to set the
8659.Va REMOTEHOST
8660environment variable
8661.TP 6
8662afs
8663The shell verifies your password with the kerberos server if local
8664authentication fails.
8665The
8666.Va afsuser
8667shell variable or the
8668.Va AFSUSER
8669environment variable override your local username if set.
8670.PD
8671.Pp
8672An administrator may enter additional strings to indicate differences
8673in the local version.
8674.RE
8675.TP 8
8676.B vimode \fR(+)
8677.RS +8
8678If unset, various key bindings change behavior to be more
8679.Va emacs
8680(1)\-style:
8681word boundaries are determined by
8682.Va wordchars
8683versus other characters.
8684.Pp
8685If set, various key bindings change behavior to be more
8686.Va vi
8687(1)\-style:
8688word boundaries are determined by
8689.Va wordchars
8690versus whitespace
8691versus other characters;
8692cursor behavior depends upon current vi mode (command, delete, insert, replace).
8693.Pp
8694This variable is unset by
8695.Va bindkey
8696
8697.Va -e
8698and
8699set by
8700.Va bindkey
8701
8702.Va -v
8703.B vimode
8704may be explicitly set or unset by the user after those
8705.Va bindkey
8706operations if required.
8707.RE
8708.TP 8
8709.B visiblebell \fR(+)
8710If set, a screen flash is used rather than the audible bell.
8711See also
8712.Va nobeep
8713.TP 8
8714.B watch \fR(+)
8715A list of user/terminal pairs to watch for logins and logouts.
8716If either the user is
8717.Sq any
8718all terminals are watched for the given user
8719and vice versa.
8720Setting
8721.Va watch
8722to
8723.Sq (any any)
8724watches all users and terminals.
8725For example,
8726.RS +8
8727.IP "" 4
8728set watch = (george ttyd1 any console $user any)
8729.Pp
8730reports activity of the user
8731.Sq george
8732on ttyd1, any user on the console, and
8733oneself (or a trespasser) on any terminal.
8734.Pp
8735Logins and logouts are checked every 10 minutes by default, but the first
8736word of
8737.Va watch
8738can be set to a number to check every so many minutes.
8739For example,
8740.IP "" 4
8741set watch = (1 any any)
8742.Pp
8743reports any login/logout once every minute.
8744For the impatient, the
8745.Va log
8746builtin command triggers a
8747.Va watch
8748report at any time.
8749All current logins
8750are reported (as with the
8751.Va log
8752builtin) when
8753.Va watch
8754is first set.
8755.Pp
8756The
8757.Va who
8758shell variable controls the format of
8759.Va watch
8760reports.
8761.RE
8762.TP 8
8763.B who \fR(+)
8764The format string for
8765.Va watch
8766messages.
8767The following sequences
8768are replaced by the given information:
8769.Pp
8770.RS +8
8771.PD 0
8772.TP 4
8773%n
8774The name of the user who logged in/out.
8775.TP 4
8776%a
8777The observed action, i.e.,
8778.Sq logged on
8779,
8780.Sq logged off
8781or
8782.Sq replaced
8783.Va olduser
8784on
8785.TP 4
8786%l
8787The terminal (tty) on which the user logged in/out.
8788.TP 4
8789%M
8790The full hostname of the remote host, or
8791.Sq local
8792if the login/logout was
8793from the local host.
8794.TP 4
8795%m
8796The hostname of the remote host up to the first
8797.Sq .
8798The full name is printed if it is an IP address or an X Window System display.
8799.PD
8800.Pp
8801%M and %m are available on only systems that store the remote hostname in
8802.Va /etc/utmp
8803If unset,
8804.Sq %n has %a %l from %m.
8805is used, or
8806.Sq %n has %a %l.
8807on systems
8808which don't store the remote hostname.
8809.RE
8810.TP 8
8811.B wordchars \fR(+)
8812A list of non-alphanumeric characters to be considered part of a word by the
8813.Va forward-word
8814,
8815.Va backward-word
8816etc., editor commands.
8817If unset, the default value is determined based on the state of
8818.Va vimode
8819:
8820if
8821.Va vimode
8822is unset,
8823.Sq *?_\-.[]~=
8824is used as the default;
8825if
8826.Va vimode
8827is set,
8828.Sq _
8829is used as the default.
8830.Sh ENVIRONMENT
8831.TP 8
8832.B AFSUSER \fR(+)
8833Equivalent to the
8834.Va afsuser
8835shell variable.
8836.TP 8
8837.B COLUMNS
8838The number of columns in the terminal.
8839See
8840.Va Terminal management
8841.TP 8
8842.B DISPLAY
8843Used by X Window System (see
8844.Va X
8845(1)).
8846If set, the shell does not set
8847.Va autologout
8848(q.v.).
8849.TP 8
8850.B EDITOR
8851The pathname to a default editor.
8852Used by the
8853.Va run-fg-editor
8854editor command if the
8855the
8856.Va editors
8857shell variable is unset.
8858See also the
8859.Va VISUAL
8860environment variable.
8861.TP 8
8862.B GROUP \fR(+)
8863Equivalent to the
8864.Va group
8865shell variable.
8866.TP 8
8867.B HOME
8868Equivalent to the
8869.Va home
8870shell variable.
8871.TP 8
8872.B HOST \fR(+)
8873Initialized to the name of the machine on which the shell
8874is running, as determined by the
8875.Va gethostname
8876(2) system call.
8877.TP 8
8878.B HOSTTYPE \fR(+)
8879Initialized to the type of machine on which the shell
8880is running, as determined at compile time.
8881This variable is obsolete and
8882will be removed in a future version.
8883.TP 8
8884.B HPATH \fR(+)
8885A colon-separated list of directories in which the
8886.Va run-help
8887editor
8888command looks for command documentation.
8889.TP 8
8890.B LANG
8891Gives the preferred character environment.
8892See
8893.Va Native Language System support
8894.TP 8
8895.B LC_CTYPE
8896If set, only ctype character handling is changed.
8897See
8898.Va Native Language System support
8899.TP 8
8900.B LINES
8901The number of lines in the terminal.
8902See
8903.Va Terminal management
8904.TP 8
8905.B LS_COLORS
8906The format of this variable is reminiscent of the
8907.Va termcap(5)
8908file format; a colon-separated list of expressions of the form
8909"
8910.Va xx=string
8911", where "
8912.Va xx
8913" is a two-character variable name.
8914The
8915variables with their associated defaults are:
8916.Pp
8917.RS +8
8918.RS +4
8919.PD 0
8920.TP 12
8921no	0
8922Normal (non-filename) text
8923.TP 12
8924fi	0
8925Regular file
8926.TP 12
8927di	01;34
8928Directory
8929.TP 12
8930ln	01;36
8931Symbolic link
8932.TP 12
8933pi	33
8934Named pipe (FIFO)
8935.TP 12
8936so	01;35
8937Socket
8938.TP 12
8939do	01;35
8940Door
8941.TP 12
8942bd	01;33
8943Block device
8944.TP 12
8945cd	01;32
8946Character device
8947.TP 12
8948ex	01;32
8949Executable file
8950.TP 12
8951mi	(none)
8952Missing file (defaults to fi)
8953.TP 12
8954or	(none)
8955Orphaned symbolic link (defaults to ln)
8956.TP 12
8957lc	^[[
8958Left code
8959.TP 12
8960rc	m
8961Right code
8962.TP 12
8963ec	(none)
8964End code (replaces lc+no+rc)
8965.PD
8966.RE
8967.Pp
8968You need to include only the variables you want to change from
8969the default.
8970.Pp
8971File names can also be colorized based on filename extension.
8972This is specified in the
8973.Va LS_COLORS
8974variable using the syntax
8975.Va "*ext=string"
8976For example, using ISO 6429 codes, to color
8977all C\-language source files blue you would specify
8978.Va "*.c=34"
8979This would color all files ending in
8980.Va .c
8981in blue (34) color.
8982.Pp
8983Control characters can be written either in C\-style\-escaped
8984notation, or in stty\-like ^\-notation.
8985The C\-style notation
8986adds
8987.Va ^[
8988for Escape, \fB\_\fR for a normal space character,
8989and
8990.Va ?
8991for Delete.
8992In addition, the
8993.Va ^[
8994escape character
8995can be used to override the default interpretation of
8996.Va ^[
8997,
8998.Va ^
8999,
9000.Va :
9001and
9002.Va =
9003.Pp
9004Each file will be written as
9005.Va <lc>
9006
9007.Va <color-code>
9008.Va <rc>
9009
9010.Va <filename>
9011
9012.Va <ec>
9013If the
9014.Va <ec>
9015code is undefined, the sequence
9016.Va <lc>
9017\fB<no>
9018.Va <rc>
9019will be used instead.
9020This is generally more convenient
9021to use, but less general.
9022The left, right and end codes are
9023provided so you don't have to type common parts over and over
9024again and to support weird terminals; you will generally not
9025need to change them at all unless your terminal does not use
9026ISO 6429 color sequences but a different system.
9027.Pp
9028If your terminal does use ISO 6429 color codes, you can
9029compose the type codes (i.e., all except the
9030.Va lc
9031,
9032.Va rc
9033,
9034and
9035.Va ec
9036codes) from numerical commands separated by semicolons.
9037The
9038most common commands are:
9039.Pp
9040.RS +8
9041.PD 0
9042.TP 4
90430
9044to restore default color
9045.TP 4
90461
9047for brighter colors
9048.TP 4
90494
9050for underlined text
9051.TP 4
90525
9053for flashing text
9054.TP 4
905530
9056for black foreground
9057.TP 4
905831
9059for red foreground
9060.TP 4
906132
9062for green foreground
9063.TP 4
906433
9065for yellow (or brown) foreground
9066.TP 4
906734
9068for blue foreground
9069.TP 4
907035
9071for purple foreground
9072.TP 4
907336
9074for cyan foreground
9075.TP 4
907637
9077for white (or gray) foreground
9078.TP 4
907940
9080for black background
9081.TP 4
908241
9083for red background
9084.TP 4
908542
9086for green background
9087.TP 4
908843
9089for yellow (or brown) background
9090.TP 4
909144
9092for blue background
9093.TP 4
909445
9095for purple background
9096.TP 4
909746
9098for cyan background
9099.TP 4
910047
9101for white (or gray) background
9102.PD
9103.RE
9104.Pp
9105Not all commands will work on all systems or display devices.
9106.Pp
9107A few terminal programs do not recognize the default end code
9108properly.
9109If all text gets colorized after you do a directory
9110listing, try changing the
9111.Va no
9112and
9113.Va fi
9114codes from 0 to the
9115numerical codes for your standard fore- and background colors.
9116.RE
9117.TP 8
9118.B MACHTYPE \fR(+)
9119The machine type (microprocessor class or machine model), as determined at compile time.
9120.TP 8
9121.B NOREBIND \fR(+)
9122If set, printable characters are not rebound to
9123.Va self-insert-command
9124See
9125.Va Native Language System support
9126.TP 8
9127.B OSTYPE \fR(+)
9128The operating system, as determined at compile time.
9129.TP 8
9130.B PATH
9131A colon-separated list of directories in which to look for executables.
9132Equivalent to the
9133.Va path
9134shell variable, but in a different format.
9135.TP 8
9136.B PWD \fR(+)
9137Equivalent to the
9138.Va cwd
9139shell variable, but not synchronized to it;
9140updated only after an actual directory change.
9141.TP 8
9142.B REMOTEHOST \fR(+)
9143The host from which the user has logged in remotely, if this is the case and
9144the shell is able to determine it.
9145Set only if the shell was so compiled;
9146see the
9147.Va version
9148shell variable.
9149.TP 8
9150.B SHLVL \fR(+)
9151Equivalent to the
9152.Va shlvl
9153shell variable.
9154.TP 8
9155.B SYSTYPE \fR(+)
9156The current system type.
9157(Domain/OS only)
9158.TP 8
9159.B TERM
9160Equivalent to the
9161.Va term
9162shell variable.
9163.TP 8
9164.B TERMCAP
9165The terminal capability string.
9166See
9167.Va Terminal management
9168.TP 8
9169.B USER
9170Equivalent to the
9171.Va user
9172shell variable.
9173.TP 8
9174.B VENDOR \fR(+)
9175The vendor, as determined at compile time.
9176.TP 8
9177.B VISUAL
9178The pathname to a default full-screen editor.
9179Used by the
9180.Va run-fg-editor
9181editor command if the
9182the
9183.Va editors
9184shell variable is unset.
9185See also the
9186.Va EDITOR
9187environment variable.
9188.Sh FILES
9189.PD 0
9190.TP 16
9191.I /etc/csh.cshrc
9192Read first by every shell.
9193ConvexOS, Stellix and Intel use
9194.Va /etc/cshrc
9195and
9196NeXTs use
9197.Va /etc/cshrc.std
9198A/UX, AMIX, Cray and IRIX have no equivalent in
9199.Xr csh 1
9200,
9201but read this file in
9202.Nm
9203anyway.
9204Solaris 2.x does not have it either, but
9205.Nm
9206reads
9207.Va /etc/.cshrc
9208(+)
9209.TP 16
9210.I /etc/csh.login
9211Read by login shells after
9212.Va /etc/csh.cshrc
9213ConvexOS, Stellix and Intel use
9214.Va /etc/login
9215,
9216NeXTs use
9217.Va /etc/login.std
9218, Solaris 2.x uses
9219.Va /etc/.login
9220and
9221A/UX, AMIX, Cray and IRIX use
9222.Va /etc/cshrc
9223.TP 16
9224.I ~/.tcshrc \fR(+)
9225Read by every shell after
9226.Va /etc/csh.cshrc
9227or its equivalent.
9228.TP 16
9229.I ~/.cshrc
9230Read by every shell, if
9231.Va ~/.tcshrc
9232doesn't exist,
9233after
9234.Va /etc/csh.cshrc
9235or its equivalent.
9236This manual uses
9237.Sq
9238.Va ~/.tcshrc
9239to mean `
9240.Va ~/.tcshrc
9241or,
9242if
9243.Va ~/.tcshrc
9244is not found,
9245.Va ~/.cshrc
9246'.
9247.TP 16
9248.I ~/.history
9249Read by login shells after
9250.Va ~/.tcshrc
9251if
9252.Va savehist
9253is set, but see also
9254.Va histfile
9255.TP 16
9256.I ~/.login
9257Read by login shells after
9258.Va ~/.tcshrc
9259or
9260.Va ~/.history
9261The shell may be compiled to read
9262.Va ~/.login
9263before instead of after
9264.Va ~/.tcshrc
9265and
9266.Va ~/.history
9267; see the
9268.Va version
9269shell variable.
9270.TP 16
9271.I ~/.cshdirs \fR(+)
9272Read by login shells after
9273.Va ~/.login
9274if
9275.Va savedirs
9276is set, but see also
9277.Va dirsfile
9278.TP 16
9279.I /etc/csh.logout
9280Read by login shells at logout.
9281ConvexOS, Stellix and Intel use
9282.Va /etc/logout
9283and
9284NeXTs use
9285.Va /etc/logout.std
9286A/UX, AMIX, Cray and IRIX have no equivalent in
9287.Xr csh 1
9288,
9289but read this file in
9290.Nm
9291anyway.
9292Solaris 2.x does not have it either, but
9293.Nm
9294reads
9295.Va /etc/.logout
9296(+)
9297.TP 16
9298.I ~/.logout
9299Read by login shells at logout after
9300.Va /etc/csh.logout
9301or its equivalent.
9302.TP 16
9303.I /bin/sh
9304Used to interpret shell scripts not starting with a
9305.Sq #
9306.TP 16
9307.I /tmp/sh*
9308Temporary file for
9309.Sq <<
9310.TP 16
9311.I /etc/passwd
9312Source of home directories for
9313.Sq ~name
9314substitutions.
9315.PD
9316.Pp
9317The order in which startup files are read may differ if the shell was so
9318compiled; see
9319.Va Startup and shutdown
9320and the
9321.Va version
9322shell variable.
9323.Sh "NEW FEATURES (+)"
9324This manual describes
9325.Nm
9326as a single entity,
9327but experienced
9328.Xr csh 1
9329users will want to pay special attention to
9330.Nm
9331's new features.
9332.Pp
9333A command-line editor, which supports
9334.Va emacs
9335(1)\-style
9336or
9337.Va vi
9338(1)\-style key bindings.
9339See
9340.Va The command-line editor
9341and
9342.Va Editor commands
9343.Pp
9344Programmable, interactive word completion and listing.
9345See
9346.Sx Completion and listing
9347and the
9348.Va complete
9349and
9350.Va uncomplete
9351builtin commands.
9352.Pp
9353.Va Spelling correction
9354(q.v.) of filenames, commands and variables.
9355.Pp
9356.Va Editor commands
9357(q.v.) which perform other useful functions in the middle of
9358typed commands, including documentation lookup
9359.Va ( run-help ),
9360quick editor restarting
9361.Va ( run-fg-editor )
9362and
9363command resolution
9364.Va ( which-command ).
9365.Pp
9366An enhanced history mechanism.
9367Events in the history list are time-stamped.
9368See also the
9369.Va history
9370command and its associated shell variables,
9371the previously undocumented
9372.Sq #
9373event specifier and new modifiers
9374under
9375.Va History substitution
9376,
9377the
9378.Va *-history
9379,
9380.Va history-search-*
9381,
9382.Va i-search-*
9383,
9384.Va vi-search-*
9385and
9386.Va toggle-literal-history
9387editor commands
9388and the
9389.Va histlit
9390shell variable.
9391.Pp
9392Enhanced directory parsing and directory stack handling.
9393See the
9394.Va cd
9395,
9396.Va pushd
9397,
9398.Va popd
9399and
9400.Va dirs
9401commands and their associated
9402shell variables, the description of
9403.Va Directory stack substitution
9404,
9405the
9406.Va dirstack
9407,
9408.Va owd
9409and
9410.Va symlinks
9411shell variables and
9412the
9413.Va normalize-command
9414and
9415.Va normalize-path
9416editor commands.
9417.Pp
9418Negation in glob-patterns.
9419See
9420.Va Filename substitution
9421.Pp
9422New
9423.Va File inquiry operators
9424(q.v.) and a
9425.Va filetest
9426builtin which uses them.
9427.Pp
9428A variety of
9429.Va Automatic, periodic and timed events
9430(q.v.) including
9431scheduled events, special aliases, automatic logout and terminal locking,
9432command timing and watching for logins and logouts.
9433.Pp
9434Support for the Native Language System
9435(see
9436.Va Native Language System support
9437),
9438OS variant features
9439(see
9440.Va OS variant support
9441and the
9442.Va echo_style
9443shell variable)
9444and system-dependent file locations (see
9445.Va FILES
9446).
9447.Pp
9448Extensive terminal-management capabilities.
9449See
9450.Va Terminal management
9451.Pp
9452New builtin commands including
9453.Va builtins
9454,
9455.Va hup
9456, \fIls\-F\fR,
9457.Va newgrp
9458,
9459.Va printenv
9460,
9461.Va which
9462and
9463.Va where
9464(q.v.).
9465.Pp
9466New variables that make useful information easily available to the shell.
9467See the
9468.Va gid
9469,
9470.Va loginsh
9471,
9472.Va oid
9473,
9474.Va shlvl
9475,
9476.Va tcsh
9477,
9478.Va tty
9479,
9480.Va uid
9481and
9482.Va version
9483shell variables and the
9484.Va HOST
9485,
9486.Va REMOTEHOST
9487,
9488.Va VENDOR
9489,
9490.Va OSTYPE
9491and
9492.Va MACHTYPE
9493environment
9494variables.
9495.Pp
9496A new syntax for including useful information in the prompt string
9497(see
9498.Va prompt
9499),
9500and special prompts for loops and spelling correction
9501(see
9502.Va prompt2
9503and
9504.Va prompt3
9505).
9506.Pp
9507Read-only variables.
9508See
9509.Va Variable substitution
9510.Sh BUGS
9511When a suspended command is restarted, the shell prints the directory
9512it started in if this is different from the current directory.
9513This can
9514be misleading (i.e., wrong) as the job may have changed directories internally.
9515.Pp
9516Shell builtin functions are not stoppable/restartable.
9517Command sequences
9518of the form
9519.Sq a ; b ; c
9520are also not handled gracefully when stopping is
9521attempted.
9522If you suspend
9523.Sq b
9524, the shell will then immediately execute
9525`c'.
9526This is especially noticeable if this expansion results from an
9527.Va alias
9528It suffices to place the sequence of commands in ()'s to force it
9529to a subshell, i.e.,
9530.Sq ( a ; b ; c )
9531.Pp
9532Control over tty output after processes are started is primitive; perhaps
9533this will inspire someone to work on a good virtual terminal interface.
9534In a virtual terminal interface much more interesting things could be
9535done with output control.
9536.Pp
9537Alias substitution is most often used to clumsily simulate shell procedures;
9538shell procedures should be provided rather than aliases.
9539.Pp
9540Control structures should be parsed rather than being recognized as
9541built-in commands.
9542This would allow control commands to be placed anywhere,
9543to be combined with
9544.Sq |
9545, and to be used with
9546.Sq &
9547and
9548.Sq ;
9549metasyntax.
9550.Pp
9551.Va foreach
9552doesn't ignore here documents when looking for its
9553.Va end
9554.Pp
9555It should be possible to use the
9556.Sq \&:
9557modifiers on the output of command
9558substitutions.
9559.Pp
9560The screen update for lines longer than the screen width is very poor
9561if the terminal cannot move the cursor up (i.e., terminal type
9562.Sq dumb
9563).
9564.Pp
9565.Va HPATH
9566and
9567.Va NOREBIND
9568don't need to be environment variables.
9569.Pp
9570Glob-patterns which do not use
9571.Sq \&?
9572,
9573.Sq *
9574or
9575.Sq []
9576or which use
9577.Sq {}
9578or
9579.Sq ~
9580are not negated correctly.
9581.Pp
9582The single-command form of
9583.Va if
9584does output redirection even if
9585the expression is false and the command is not executed.
9586.Pp
9587\fIls\-F\fR includes file identification characters when sorting filenames
9588and does not handle control characters in filenames well.
9589It cannot be
9590interrupted.
9591.Pp
9592Command substitution supports multiple commands and conditions, but not
9593cycles or backward
9594.Va goto
9595s.
9596.Pp
9597Report bugs at http://bugs.gw.com/, preferably with fixes.
9598If you want to
9599help maintain and test tcsh, send mail to tcsh-request@mx.gw.com with the
9600text
9601.Sq subscribe tcsh
9602on a line by itself in the body.
9603.Sh THE T IN TCSH
9604In 1964, DEC produced the PDP-6.
9605The PDP-10 was a later re-implementation.
9606It
9607was re-christened the DECsystem-10 in 1970 or so when DEC brought out the
9608second model, the KI10.
9609.Pp
9610TENEX was created at Bolt, Beranek & Newman (a Cambridge, Massachusetts
9611think tank) in
96121972 as an experiment in demand-paged virtual memory operating systems.
9613They
9614built a new pager for the DEC PDP-10 and created the OS to go with it.
9615It was
9616extremely successful in academia.
9617.Pp
9618In 1975, DEC brought out a new model of the PDP-10, the KL10; they intended to
9619have only a version of TENEX, which they had licensed from BBN, for the new
9620box.
9621They called their version TOPS-20 (their capitalization is trademarked).
9622A lot of TOPS-10 users (`The OPerating System for PDP-10') objected; thus DEC
9623found themselves supporting two incompatible systems on the same hardware--but
9624then there were 6 on the PDP-11!
9625.Pp
9626TENEX, and TOPS-20 to version 3, had command completion
9627via a user-code-level subroutine library called ULTCMD.
9628With version 3, DEC
9629moved all that capability and more into the monitor (`kernel' for you Unix
9630types), accessed by the COMND% JSYS (`Jump to SYStem' instruction, the
9631supervisor call mechanism [are my IBM roots also showing?]).
9632.Pp
9633The creator of tcsh was impressed by this feature and several others of TENEX
9634and TOPS-20, and created a version of csh which mimicked them.
9635.Sh LIMITATIONS
9636The system limits argument lists to ARG_MAX characters.
9637.Pp
9638The number of arguments to a command which involves filename expansion is
9639limited to 1/6th the number of characters allowed in an argument list.
9640.Pp
9641Command substitutions may substitute no more characters than are allowed in
9642an argument list.
9643.Pp
9644To detect looping, the shell restricts the number of
9645.Va alias
9646substitutions on a single line to 20.
9647.Sh "SEE ALSO"
9648csh(1), emacs(1), ls(1), newgrp(1), sh(1), setpath(1), stty(1), su(1),
9649tset(1), vi(1), x(1), access(2), execve(2), fork(2), killpg(2),
9650pipe(2), setrlimit(2), sigvec(2), stat(2), umask(2), vfork(2), wait(2),
9651malloc(3), setlocale(3), tty(4), a.out(5), termcap(5), environ(7),
9652termio(7), Introduction to the C Shell
9653.Sh VERSION
9654This manual documents tcsh 6.20.00 (Astron) 2016-11-24.
9655.Sh AUTHORS
9656.PD 0
9657.TP 2
9658William Joy
9659Original author of
9660.Xr csh 1
9661.TP 2
9662J.E. Kulp, IIASA, Laxenburg, Austria
9663Job control and directory stack features
9664.TP 2
9665Ken Greer, HP Labs, 1981
9666File name completion
9667.TP 2
9668Mike Ellis, Fairchild, 1983
9669Command name recognition/completion
9670.TP 2
9671Paul Placeway, Ohio State CIS Dept., 1983-1993
9672Command line editor, prompt routines, new glob syntax and numerous fixes
9673and speedups
9674.TP 2
9675Karl Kleinpaste, CCI 1983-4
9676Special aliases, directory stack extraction stuff, login/logout watch,
9677scheduled events, and the idea of the new prompt format
9678.TP 2
9679Rayan Zachariassen, University of Toronto, 1984
9680\fIls\-F\fR and
9681.Va which
9682builtins and numerous bug fixes, modifications
9683and speedups
9684.TP 2
9685Chris Kingsley, Caltech
9686Fast storage allocator routines
9687.TP 2
9688Chris Grevstad, TRW, 1987
9689Incorporated 4.3BSD
9690.Xr csh 1
9691into
9692.Nm
9693.TP 2
9694Christos S. Zoulas, Cornell U. EE Dept., 1987-94
9695Ports to HPUX, SVR2 and SVR3, a SysV version of getwd.c, SHORT_STRINGS support
9696and a new version of sh.glob.c
9697.TP 2
9698James J Dempsey, BBN, and Paul Placeway, OSU, 1988
9699A/UX port
9700.TP 2
9701Daniel Long, NNSC, 1988
9702.Va wordchars
9703.TP 2
9704Patrick Wolfe, Kuck and Associates, Inc., 1988
9705.Va vi
9706mode cleanup
9707.TP 2
9708David C Lawrence, Rensselaer Polytechnic Institute, 1989
9709.Va autolist
9710and ambiguous completion listing
9711.TP 2
9712Alec Wolman, DEC, 1989
9713Newlines in the prompt
9714.TP 2
9715Matt Landau, BBN, 1989
9716.Va ~/.tcshrc
9717.TP 2
9718Ray Moody, Purdue Physics, 1989
9719Magic space bar history expansion
9720.TP 2
9721Mordechai ????, Intel, 1989
9722printprompt() fixes and additions
9723.TP 2
9724Kazuhiro Honda, Dept. of Computer Science, Keio University, 1989
9725Automatic spelling correction and
9726.Va prompt3
9727.TP 2
9728Per Hedeland, Ellemtel, Sweden, 1990-
9729Various bugfixes, improvements and manual updates
9730.TP 2
9731Hans J. Albertsson (Sun Sweden)
9732.Va ampm
9733,
9734.Va settc
9735and
9736.Va telltc
9737.TP 2
9738Michael Bloom
9739Interrupt handling fixes
9740.TP 2
9741Michael Fine, Digital Equipment Corp
9742Extended key support
9743.TP 2
9744Eric Schnoebelen, Convex, 1990
9745Convex support, lots of
9746.Xr csh 1
9747bug fixes,
9748save and restore of directory stack
9749.TP 2
9750Ron Flax, Apple, 1990
9751A/UX 2.0 (re)port
9752.TP 2
9753Dan Oscarsson, LTH Sweden, 1990
9754NLS support and simulated NLS support for non NLS sites, fixes
9755.TP 2
9756Johan Widen, SICS Sweden, 1990
9757.Va shlvl
9758, Mach support,
9759.Va correct-line
9760, 8-bit printing
9761.TP 2
9762Matt Day, Sanyo Icon, 1990
9763POSIX termio support, SysV limit fixes
9764.TP 2
9765Jaap Vermeulen, Sequent, 1990-91
9766Vi mode fixes, expand-line, window change fixes, Symmetry port
9767.TP 2
9768Martin Boyer, Institut de recherche d'Hydro-Quebec, 1991
9769.Va autolist
9770beeping options, modified the history search to search for
9771the whole string from the beginning of the line to the cursor.
9772.TP 2
9773Scott Krotz, Motorola, 1991
9774Minix port
9775.TP 2
9776David Dawes, Sydney U. Australia, Physics Dept., 1991
9777SVR4 job control fixes
9778.TP 2
9779Jose Sousa, Interactive Systems Corp., 1991
9780Extended
9781.Va vi
9782fixes and
9783.Va vi
9784delete command
9785.TP 2
9786Marc Horowitz, MIT, 1991
9787ANSIfication fixes, new exec hashing code, imake fixes,
9788.Va where
9789.TP 2
9790Bruce Sterling Woodcock, sterling@netcom.com, 1991-1995
9791ETA and Pyramid port, Makefile and lint fixes,
9792.Va ignoreeof
9793=n addition, and
9794various other portability changes and bug fixes
9795.TP 2
9796Jeff Fink, 1992
9797.Va complete-word-fwd
9798and
9799.Va complete-word-back
9800.TP 2
9801Harry C. Pulley, 1992
9802Coherent port
9803.TP 2
9804Andy Phillips, Mullard Space Science Lab U.K., 1992
9805VMS-POSIX port
9806.TP 2
9807Beto Appleton, IBM Corp., 1992
9808Walking process group fixes,
9809.Xr csh 1
9810bug fixes,
9811POSIX file tests, POSIX SIGHUP
9812.TP 2
9813Scott Bolte, Cray Computer Corp., 1992
9814CSOS port
9815.TP 2
9816Kaveh R. Ghazi, Rutgers University, 1992
9817Tek, m88k, Titan and Masscomp ports and fixes.
9818Added autoconf support.
9819.TP 2
9820Mark Linderman, Cornell University, 1992
9821OS/2 port
9822.TP 2
9823Mika Liljeberg, liljeber@kruuna.Helsinki.FI, 1992
9824Linux port
9825.TP 2
9826Tim P. Starrin, NASA Langley Research Center Operations, 1993
9827Read-only variables
9828.TP 2
9829Dave Schweisguth, Yale University, 1993-4
9830New man page and tcsh.man2html
9831.TP 2
9832Larry Schwimmer, Stanford University, 1993
9833AFS and HESIOD patches
9834.TP 2
9835Luke Mewburn, RMIT University, 1994-6
9836Enhanced directory printing in prompt,
9837added
9838.Va ellipsis
9839and
9840.Va rprompt
9841.TP 2
9842Edward Hutchins, Silicon Graphics Inc., 1996
9843Added implicit cd.
9844.TP 2
9845Martin Kraemer, 1997
9846Ported to Siemens Nixdorf EBCDIC machine
9847.TP 2
9848Amol Deshpande, Microsoft, 1997
9849Ported to WIN32 (Windows/95 and Windows/NT); wrote all the missing library
9850and message catalog code to interface to Windows.
9851.TP 2
9852Taga Nayuta, 1998
9853Color ls additions.
9854.PD
9855.Pp
9856.Sh "THANKS TO"
9857Bryan Dunlap, Clayton Elwell, Karl Kleinpaste, Bob Manson, Steve Romig,
9858Diana Smetters, Bob Sutterfield, Mark Verber, Elizabeth Zwicky and all
9859the other people at Ohio State for suggestions and encouragement
9860.Pp
9861All the people on the net, for putting up with,
9862reporting bugs in, and suggesting new additions to each and every version
9863.Pp
9864Richard M. Alderson III, for writing the
9865.Sq T in tcsh
9866section
9867