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