Category : File Managers
Archive   : MS_SH164.ZIP
Filename : SH.MAN

 
Output of file : SH.MAN contained in archive : MS_SH164.ZIP



SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



NNNNAAAAMMMMEEEE
sh, rsh - shell, the standard/restricted command programming
language

SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
sssshhhh [ ----aaaacccceeeeffffhhhhiiiikkkknnnnmmmmrrrrssssttttuuuuvvvvxxxx0000 ] [ args ]
rrrrsssshhhh [ ----aaaacccceeeeffffhhhhiiiikkkknnnnmmmmrrrrssssttttuuuuvvvvxxxx0000 ] [ args ]

DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
_S_h is a command programming language that executes commands
read from a terminal or a file. _R_s_h is a restricted version
of the standard command interpreter _s_h; it is used to set up
login names and execution environments whose capabilities
are more controlled than those of the standard shell. See
_I_n_v_o_c_a_t_i_o_n below for the meaning of arguments to the shell.

DDDDeeeeffffiiiinnnniiiittttiiiioooonnnnssss
A _b_l_a_n_k is a tab or a space. A _n_a_m_e is a sequence of
letters, digits, or underscores beginning with a letter or
underscore. A _p_a_r_a_m_e_t_e_r is a name, a digit, or any of the
characters ****, @@@@, ####, ????, ----, $$$$, and !!!!.

CCCCoooommmmmmmmaaaannnnddddssss
A _s_i_m_p_l_e-_c_o_m_m_a_n_d is a sequence of non-blank _w_o_r_d_s separated
by _b_l_a_n_k_s. The first word specifies the name of the command
to be executed. Except as specified below, the remaining
words are passed as arguments to the invoked command. The
command name is passed as argument 0 (see _e_x_e_c(2)). The
_v_a_l_u_e of a simple-command is its exit status if it
terminates normally, or (octal) 200+_s_t_a_t_u_s if it terminates
abnormally (see _s_i_g_n_a_l(2) for a list of status values).

A _p_i_p_e_l_i_n_e is a sequence of one or more _c_o_m_m_a_n_d_s separated
by |||| (or, for historical compatibility, by ^^^^). The standard
output of each command but the last is connected by a
_p_i_p_e(2) to the standard input of the next command. Each
command is run as a separate process; the shell waits for
the last command to terminate. The exit status of a
pipeline is the exit status of the last command.

A _l_i_s_t is a sequence of one or more pipelines separated by
;;;;, &&&&&&&&, or ||||||||, and optionally terminated by ;;;;. Of these
three symbols, ;;;; has a lower precedence than that of &&&&&&&& and
||||||||. The symbols &&&&&&&& and |||||||| also have equal precedence. A
semicolon (;;;;) causes sequential execution of the preceding
pipeline. The symbol &&&&&&&& (||||||||) causes the _l_i_s_t following it
to be executed only if the preceding pipeline returns a zero
(non-zero) exit status. An arbitrary number of new-lines
may appear in a _l_i_s_t, instead of semicolons, to delimit
commands.

A _c_o_m_m_a_n_d is either a simple-command or one of the



Page 1 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



following. Unless otherwise stated, the value returned by a
command is that of the last simple-command executed in the
command.

ffffoooorrrr _n_a_m_e [ iiiinnnn _w_o_r_d ... ] ddddoooo _l_i_s_t ddddoooonnnneeee
Each time a ffffoooorrrr command is executed, _n_a_m_e is set to the
next _w_o_r_d taken from the iiiinnnn _w_o_r_d list. If iiiinnnn _w_o_r_d ...
is omitted, then the ffffoooorrrr command executes the ddddoooo _l_i_s_t
once for each positional parameter that is set (see
_P_a_r_a_m_e_t_e_r _S_u_b_s_t_i_t_u_t_i_o_n below). Execution ends when
there are no more words in the list.
ccccaaaasssseeee _w_o_r_d iiiinnnn [ _p_a_t_t_e_r_n [ | _p_a_t_t_e_r_n ] ... )))) _l_i_s_t ;;;;;;;; ] ... eeeessssaaaacccc
A ccccaaaasssseeee command executes the _l_i_s_t associated with the
first _p_a_t_t_e_r_n that matches _w_o_r_d. The form of the
patterns is the same as that used for file-name
generation (see _F_i_l_e _N_a_m_e _G_e_n_e_r_a_t_i_o_n) except that a
slash, a leading dot, or a dot immediately following a
slash need not be matched explicitly, and the match is
case sensitive.
iiiiffff _l_i_s_t tttthhhheeeennnn _l_i_s_t [ eeeelllliiiiffff _l_i_s_t tttthhhheeeennnn _l_i_s_t ] ... [ eeeellllsssseeee _l_i_s_t ] ffffiiii
The _l_i_s_t following iiiiffff is executed and, if it returns a
zero exit status, the _l_i_s_t following the first tttthhhheeeennnn is
executed. Otherwise, the _l_i_s_t following eeeelllliiiiffff is
executed and, if its value is zero, the _l_i_s_t following
the next tttthhhheeeennnn is executed. Failing that, the eeeellllsssseeee _l_i_s_t
is executed. If no eeeellllsssseeee _l_i_s_t or tttthhhheeeennnn _l_i_s_t is executed,
then the iiiiffff command returns a zero exit status.
wwwwhhhhiiiilllleeee _l_i_s_t ddddoooo _l_i_s_t ddddoooonnnneeee
A wwwwhhhhiiiilllleeee command repeatedly executes the wwwwhhhhiiiilllleeee _l_i_s_t and,
if the exit status of the last command in the list is
zero, executes the ddddoooo _l_i_s_t; otherwise the loop
terminates. If no commands in the ddddoooo _l_i_s_t are
executed, then the wwwwhhhhiiiilllleeee command returns a zero exit
status; uuuunnnnttttiiiillll may be used in place of wwwwhhhhiiiilllleeee to negate
the loop termination test.
((((_l_i_s_t))))
Execute _l_i_s_t in a sub-shell. The shell creates a new
environment in which to execute the _l_i_s_t, but does not
fork a sub-shell as a Unix system would. The original
environment is restored on completion.
{{{{ _l_i_s_t;;;; }}}}
_l_i_s_t is simply executed.
_n_a_m_e (((()))) {{{{ _l_i_s_t;;;; }}}}
Define a function which is referenced by _n_a_m_e. The
body of the function is the _l_i_s_t of commands between {{{{
and }}}}. Execution of functions is described below (see
_E_x_e_c_u_t_i_o_n).

The following words are only recognized as the first word of
a command and when not quoted:

iiiiffff tttthhhheeeennnn eeeellllsssseeee eeeelllliiiiffff ffffiiii ccccaaaasssseeee eeeessssaaaacccc ffffoooorrrr wwwwhhhhiiiilllleeee uuuunnnnttttiiiillll ddddoooo ddddoooonnnneeee {{{{ }}}}



Page 2 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



CCCCoooommmmmmmmeeeennnnttttssss
A word beginning with #### causes that word and all the
following characters up to a new-line to be ignored.

TTTTiiiillllddddeeee SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnn
Each word is checked to see if it begins with an unquoted~~~~.
If it is, the ~~~~ is replaced by the value of the HHHHOOOOMMMMEEEE
parameter.

CCCCoooommmmmmmmaaaannnndddd SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnn
The standard output from a command enclosed in parenthesis
preceded by a dollar sign ($$$$(((())))), or in a pair of grave
accents (````````) may be used as part or all of a word; trailing
new-lines are removed.

PPPPaaaarrrraaaammmmeeeetttteeeerrrr SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnn
The character $$$$ is used to introduce substitutable
_p_a_r_a_m_e_t_e_r_s. There are two types of parameters, positional
and keyword. If _p_a_r_a_m_e_t_e_r is a digit, it is a positional
parameter. Positional parameters may be assigned values by
sssseeeetttt. Keyword parameters (also known as variables) may be
assigned values by writing:

_n_a_m_e = _v_a_l_u_e [ _n_a_m_e = _v_a_l_u_e ] ...

Pattern-matching is not performed on _v_a_l_u_e. There cannot be
a function and a variable with the same _n_a_m_e.

$$$${{{{_p_a_r_a_m_e_t_e_r}}}}
The value, if any, of the _p_a_r_a_m_e_t_e_r is substituted.
The braces are required only when _p_a_r_a_m_e_t_e_r is followed
by a letter, digit, or underscore that is not to be
interpreted as part of its name. If _p_a_r_a_m_e_t_e_r is **** or
@@@@, all the positional parameters, starting with $$$$1111, are
substituted (separated by spaces). Parameter $$$$0000 is set
from argument zero when the shell is invoked.
$$$${{{{####_p_a_r_a_m_e_t_e_r}}}}
If _p_a_r_a_m_e_t_e_r is **** or @@@@, the number of positional
parameters is substituted. Otherwise, the length of
the value of the _p_a_r_a_m_e_t_e_r is substituted.
$$$${{{{_p_a_r_a_m_e_t_e_r::::----_w_o_r_d}}}}
If _p_a_r_a_m_e_t_e_r is set and is non-null, substitute its
value; otherwise substitute _w_o_r_d.
$$$${{{{_p_a_r_a_m_e_t_e_r::::====_w_o_r_d}}}}
If _p_a_r_a_m_e_t_e_r is not set or is null set it to _w_o_r_d; the
value of the parameter is substituted. Positional
parameters may not be assigned to in this way.
$$$${{{{_p_a_r_a_m_e_t_e_r::::????_w_o_r_d}}}}
If _p_a_r_a_m_e_t_e_r is set and is non-null, substitute its
value; otherwise, print _w_o_r_d and exit from the shell.
If _w_o_r_d is omitted, the message ``parameter null or not
set'' is printed.



Page 3 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



$$$${{{{_p_a_r_a_m_e_t_e_r::::++++_w_o_r_d}}}}
If _p_a_r_a_m_e_t_e_r is set and is non-null, substitute _w_o_r_d;
otherwise substitute nothing.
$$$${{{{_p_a_r_a_m_e_t_e_r####_p_a_t_t_e_r_n}}}}
$$$${{{{_p_a_r_a_m_e_t_e_r########_p_a_t_t_e_r_n}}}} If the Shell _p_a_t_t_e_r_n matches the
beginning of the value of _p_a_r_a_m_e_t_e_r, then the value of
this substitution is the value of the _p_a_r_a_m_e_t_e_r with
the matched portion deleted; otherwise the value of
this _p_a_r_a_m_e_t_e_r is substituted. In the first form the
smallest matching _p_a_t_t_e_r_n is deleted and in the latter
form the largest matching _p_a_t_t_e_r_n is deleted.
$$$${{{{_p_a_r_a_m_e_t_e_r%%%%_p_a_t_t_e_r_n}}}}
$$$${{{{_p_a_r_a_m_e_t_e_r%%%%%%%%_p_a_t_t_e_r_n}}}} If the Shell _p_a_t_t_e_r_n matches the
end of the value of _p_a_r_a_m_e_t_e_r, then the value of this
substitution is the value of the _p_a_r_a_m_e_t_e_r with the
matched portion deleted; otherwise the value of this
_p_a_r_a_m_e_t_e_r is substituted. In the first form the
smallest matching _p_a_t_t_e_r_n is deleted and in the latter
form the largest matching _p_a_t_t_e_r_n is deleted.

In the above, _w_o_r_d is not evaluated unless it is to be used
as the substituted string, so that, in the following
example, ppppwwwwdddd is executed only if dddd is not set or is null:

echo ${d:-`pwd`}

If the colon (::::) is omitted from the above expressions, the
shell only checks whether _p_a_r_a_m_e_t_e_r is set or not (_I_t _i_s _n_o_t
_c_l_e_a_r _w_h_a_t _t_h_i_s _m_e_a_n_s).

The following parameters are automatically set by the shell:
#### The number of positional parameters in decimal.
---- Flags supplied to the shell on invocation or by
the sssseeeetttt command.
???? The decimal value returned by the last
synchronously executed command.
$$$$ The process number of this shell.
!!!! The process number of the last background command
invoked.
~~~~ The shell reserves all variables beginning with a
~~~~ for its own internal use and these variables
cannot be accessed by the user.

The following parameters are used by the shell:
CCCCDDDDPPPPAAAATTTTHHHH
The search path for the _c_d command. (Note that
because a colon is used by MSDOS to indicate a
drive, a semi-colon is used to separate the path
names instead of a colon - this implies that the
CDPATH variable must be set using single or double
quotes to surround the value).
CCCCOOOOMMMMSSSSPPPPEEEECCCC



Page 4 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



When the shell has to process an MSDOS ._b_a_t file,
it expects the file indicated by the value of this
environment variable to be an executable program
capable of processing the MSDOS ._b_a_t file. The
program is invoked with the arguments ////cccc
bbbbaaaatttt____ffffiiiilllleeee____nnnnaaaammmmeeee.
EEEEXXXXTTTTEEEENNNNDDDDEEEEDDDD____LLLLIIIINNNNEEEE
This parameter defines a file containing a list of
command which can accept an Extended Command Line
using the indirect command file character @@@@. When
a command which can process the Extended Command
Line finds a parameter starting with a @@@@ in the
command list, treats the rest of the parameter as
a file and reads the parameters from that file.
Examples of this functionality include the
Standard LLLLiiiinnnnkkkkeeeerrrr and LLLLiiiibbbbrrrraaaarrrriiiiaaaannnn. The filename
defined by EEEEXXXXTTTTEEEENNNNDDDDEEEEDDDD____LLLLIIIINNNNEEEE contains a list of
command (including the .exe or .com extension)
separated by a newlines. If the command is in
upper case, the file name on the command line is
set up with backslashes as the directory
separator. Otherwise, slashes (Unix style) are
used. This functionality allows the user to get
round the 127 byte command line length limit of
MSDOS.
HHHHIIIISSSSTTTTFFFFIIIILLLLEEEE
The file where command history is saved across
login sessions. The default value is
$$$$HHHHOOOOMMMMEEEE////hhhhiiiissssttttoooorrrryyyy....sssshhhh.
HHHHOOOOMMMMEEEE The default argument (home directory) for the _c_d
command.
IIIIFFFFSSSS Internal field separators, normally ssssppppaaaacccceeee, ttttaaaabbbb,
and nnnneeeewwww----lllliiiinnnneeee.
MMMMAAAAIIIILLLL If this parameter is set to the name of a mail
file _a_n_d the MMMMAAAAIIIILLLLPPPPAAAATTTTHHHH parameter is not set, the
shell informs the user of the arrival of mail in
the specified file.
MMMMAAAAIIIILLLLCCCCHHHHEEEECCCCKKKK
This parameter specifies how often (in seconds)
the shell will check for the arrival of mail in
the files specified by the MMMMAAAAIIIILLLLPPPPAAAATTTTHHHH or MMMMAAAAIIIILLLL
parameters. If set to 0, the shell will check
before each prompt.
MMMMAAAAIIIILLLLPPPPAAAATTTTHHHH
A semi-colon (;;;;) separated list of file names. If
this parameter is set, the shell informs the user
of the arrival of mail in any of the specified
files. Each file name can be followed by %%%% and a
message that will be printed when the modification
time changes. The default message is "_y_o_u _h_a_v_e
_m_a_i_l".
PPPPAAAATTTTHHHH The search path for commands (see _E_x_e_c_u_t_i_o_n



Page 5 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



below).
The user may not change PPPPAAAATTTTHHHH if executing under
_r_s_h. (Note that because a colon is used by MSDOS
to indicate a drive, a semi-colon is used to
separate the path names instead of a colon - this
implies that the PATH variable must be set using
single or double quotes to surround the value).
The Shell automatically converts Unix format PPPPAAAATTTTHHHH
assignments to MSDOS format when appropriate. A
assignment is converted if there are no semi-
colons, no backslashes and one or more colons. If
there is only one colon, it must not be the second
character of the new value.
PPPPSSSS1111 Primary prompt string, by default ``$$$$ ''.
PPPPSSSS2222 Secondary prompt string, by default ``>>>> ''.
SSSSHHHHEEEELLLLLLLL
When the shell is invoked, it scans the
environment (see _E_n_v_i_r_o_n_m_e_n_t below) for this name.
If it is found and there is an 'r' in the file
name part of its value, the shell becomes a
restricted shell. The shell also uses this
variable to decide which program to spawn to
interpret shell scripts (see _E_x_e_c_u_t_i_o_n below).
TTTTMMMMPPPP The location of temporary files created by the
shell. If this variable is not defined, the Shell
uses the HHHHOOOOMMMMEEEE directory for temporary files.
Failing that, the root directory of the current
drive is used.
The shell gives default values to PPPPAAAATTTTHHHH, PPPPSSSS1111, PPPPSSSS2222, SSSSHHHHEEEELLLLLLLL,
HHHHOOOOMMMMEEEE and IIIIFFFFSSSS.

BBBBllllaaaannnnkkkk IIIInnnntttteeeerrrrpppprrrreeeettttaaaattttiiiioooonnnn
After parameter and command substitution, the results of
substitution are scanned for internal field separator
characters (those found in IIIIFFFFSSSS) and split into distinct
arguments where such characters are found. Explicit null
arguments ("""""""" or '''''''') are retained. Implicit null arguments
(those resulting from _p_a_r_a_m_e_t_e_r_s that have no values) are
removed.
FFFFiiiilllleeee NNNNaaaammmmeeee GGGGeeeennnneeeerrrraaaattttiiiioooonnnn
Following substitution, each command _w_o_r_d is scanned for the
characters ****, ???? and [[[[. If one of these characters appears
the word is regarded as a _p_a_t_t_e_r_n. The word is replaced
with alphabetically sorted file names that match the
pattern. If no file name is found that matches the pattern,
the word is left unchanged. The character .... at the start of
a file name or immediately following a ////, as well as the
character //// itself, must be matched explicitly. When
matching patterns for file names, the shell ignores the case
of the pattern and the file directory entries. Generated
file names are always in lower case.
**** Matches any string, including the null string.



Page 6 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



???? Matches any single character.
[[[[ ............ ]]]]
Matches any one of the enclosed characters. A
pair of characters separated by ---- matches any
character lexically between the pair, inclusive.
If the first character following the opening ``[''
is a ````````!!!!'''''''' any character not enclosed is matched.

If the shell has to open or create the file ////ddddeeeevvvv////ttttttttyyyy or
////ddddeeeevvvv////nnnnuuuullllllll (which are Unix special files), they are converted
to the equivalent MSDOS file names (////ddddeeeevvvv////ccccoooonnnn and ////ddddeeeevvvv////nnnnuuuullll
respectively). Any user programs which could expect
////ddddeeeevvvv////ttttttttyyyy or ////ddddeeeevvvv////nnnnuuuullllllll as arguments must do its own mapping
to the MSDOS equivalents.

QQQQuuuuoooottttiiiinnnngggg
The following characters have a special meaning to the shell
and cause termination of a word unless quoted:

;;;; &&&& (((( )))) |||| ^^^^ <<<< >>>> nnnneeeewwww----lllliiiinnnneeee ssssppppaaaacccceeee ttttaaaabbbb

A character may be _q_u_o_t_e_d (i.e., made to stand for itself)
by preceding it with a \\\\. The pair \\\\nnnneeeewwww----lllliiiinnnneeee is ignored.
All characters enclosed between a pair of single quote marks
(''''''''), except a single quote, are quoted. Inside double
quote marks (""""""""), parameter and command substitution occurs
and \\\\ quotes the characters \\\\, ````, """", and $$$$. """"$$$$****"""" is
equivalent to """"$$$$1111 $$$$2222 ............"""", whereas """"$$$$@@@@"""" is equivalent to
""""$$$$1111"""" """"$$$$2222"""" .............

PPPPrrrroooommmmppppttttiiiinnnngggg
When used interactively, the shell prompts with the value of
PPPPSSSS1111 before reading a command. If at any time a new-line is
typed and further input is needed to complete a command, the
secondary prompt (i.e., the value of PPPPSSSS2222) is issued.

Many people like to have the shell provide them with useful
information in their prompt. To accommodate this, the shell
recognises special sequences of characters in the values of
PPPPSSSS1111 and PPPPSSSS2222, and substitutes the appropriate information for
them. The special sequences and what they signify are:

%%%%dddd Place the current date, in the form DAY DD-MM-YY
into the prompt.

%%%%eeee Place the current event number (as defined by the
hhhhiiiissssttttoooorrrryyyy command) into the prompt. If history
evaluation has been turned off (via hhhhiiiissssttttoooorrrryyyy ----dddd),
no number will be substituted in (i.e. the %%%%eeee will
be removed).

%%%%nnnn Place the current working drive into the prompt.



Page 7 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



%%%%pppp Place the current working directory into the
prompt.

%%%%tttt Place the current time of day, in the form HH:MM
into the prompt. The time is on a 24 hour clock,
i.e. 1:30 in the afternoon will be 13:30.

%%%%vvvv Place the MSDOS version number, in the form MSDOS
MM:MM into the prompt.

%%%%%%%% Place the character % into the prompt.

\\\\xxxxxxxxxxxx Place the character _\_x_x_x into the prompt. The
processing of escape sequences is the same as that
for eeeecccchhhhoooo.

Some of these facilities are of more use than others.

IIIInnnnppppuuuutttt////OOOOuuuuttttppppuuuutttt
Before a command is executed, its input and output may be
redirected using a special notation interpreted by the
shell. The following may appear anywhere in a simple-
command or may precede or follow a _c_o_m_m_a_n_d and are _n_o_t
passed on to the invoked command; substitution occurs before
_w_o_r_d or _d_i_g_i_t is used:

<<< descriptor 0).
>>>>wwwwoooorrrrdddd Use file _w_o_r_d as standard output (file
descriptor 1). If the file does not exist it
is created; otherwise, it is truncated to zero
length.
>>>>>>>>wwwwoooorrrrdddd Use file _w_o_r_d as standard output. If the file
exists output is appended to it (by first
seeking to the end-of-file); otherwise, the
file is created.
<<<<<<<<[----]wwwwoooorrrrdddd The shell input is read up to a line that is
the same as _w_o_r_d, or to an end-of-file. The
resulting document becomes the standard input.
If any character of _w_o_r_d is quoted, no
interpretation is placed upon the characters
of the document; otherwise, parameter and
command substitution occurs, (unescaped)
\\\\nnnneeeewwww----lllliiiinnnneeee is ignored, and \\\\ must be used to
quote the characters \\\\, $$$$, ````, and the first
character of _w_o_r_d. If ---- is appended to <<<<<<<<,
all leading tabs are stripped from _w_o_r_d and
from the document.
<<<<&&&&ddddiiiiggggiiiitttt Use the file associated with file descriptor
_d_i_g_i_t as standard input. Similarly for the
standard output using >>>>&&&&ddddiiiiggggiiiitttt.
<<<<&&&&---- The standard input is closed. Similarly for



Page 8 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



the standard output using >>>>&&&&----.
nnnn<<<<>>>>wwwwoooorrrrdddd causes the file _w_o_r_d to be opened on file
descriptor _n for both reading and writing.
The file must already exist.

If any of the above is preceded by a digit, the file
descriptor which will be associated with the file is that
specified by the digit (instead of the default 0 or 1). For
example:

... 2>&1

associates file descriptor 2 with the file currently
associated with file descriptor 1.

The order in which redirections are specified is
significant. The shell evaluates redirections left-to-
right. For example:

... 1>_x_x_x 2>&1

first associates file descriptor 1 with file _x_x_x. It
associates file descriptor 2 with the file associated with
file descriptor 1 (i.e. _x_x_x). If the order of redirections
were reversed, file descriptor 2 would be associated with
the terminal (assuming file descriptor 1 had been) and file
descriptor 1 would be associated with file _x_x_x .

The environment for the execution of a command contains the
file descriptors of the invoking shell as modified by
input/output specifications.

Redirection of output is not allowed in the restricted
shell.

EEEEnnnnvvvviiiirrrroooonnnnmmmmeeeennnntttt
The _e_n_v_i_r_o_n_m_e_n_t (see _e_n_v_i_r_o_n(5)) is a list of name-value
pairs that is passed to an executed program in the same way
as a normal argument list. The shell interacts with the
environment in several ways. On invocation, the shell scans
the environment and creates a parameter for each name found,
giving it the corresponding value. If the user modifies the
value of any of these parameters or creates new parameters,
none of these affects the environment unless the eeeexxxxppppoooorrrrtttt
command is used to bind the shell's parameter to the
environment (see also sssseeeetttt ----aaaa). A parameter may be removed
from the environment with the uuuunnnnsssseeeetttt command. The
environment seen by any executed command is thus composed of
any unmodified name-value pairs originally inherited by the
shell, minus any pairs removed by uuuunnnnsssseeeetttt, plus any
modifications or additions, all of which must be noted in
eeeexxxxppppoooorrrrtttt commands.



Page 9 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



The environment for any _s_i_m_p_l_e-_c_o_m_m_a_n_d may be augmented by
prefixing it with one or more assignments to parameters.
Thus:

TERM=450 cmd args and
(export TERM; TERM=450; cmd args)

are equivalent (as far as the execution of _c_m_d is
concerned).

If the ----kkkk flag is set, _a_l_l keyword arguments are placed in
the environment, even if they occur after the command name.
The following first prints aaaa====bbbb cccc and cccc:

echo a=b c
set -k
echo a=b c

SSSSiiiiggggnnnnaaaallllssss
The INTERRUPT and QUIT signals for an invoked command are
ignored if the command is followed by &&&&; otherwise signals
have the values inherited by the shell from its parent, with
the exception of signal 11 (but see also the ttttrrrraaaapppp command
below).

HHHHiiiissssttttoooorrrryyyy
When reading input from an interactive terminal, a ``!'' at
the start of a line signals to the shell that it should
attempt to perform a history subsitution. A history
subsitution is a short-hand method which allows the user to
recall a previous command for execution or editing. The
recalled command is placed in the command line for editing
or passing to the rest of the shell for normal processing.
A history substitution takes the form:

!!!! [ ! | _s_t_r | _n_u_m ] _t_e_r_m_i_n_a_t_o_r

!!!!!!!! will place the previous command in the command line.
!!!!_n_u_m will place the history command with the specified
number in the command line. !!!!_s_t_r will find the most recent
command line that started with the characters in _s_t_r.

The _t_e_r_m_i_n_a_t_o_r determines what action is performed after the
history line has been found. If the original history
command is entered using the <<<>>> key, the new command
line is passed directly to the shell. If the <<<>>> key is
pressed, the new command line can be edited in the manner
described below.

CCCCoooommmmmmmmaaaannnndddd LLLLiiiinnnneeee EEEEddddiiiittttiiiinnnngggg
When reading input from an interactive terminal, certain
keystrokes allow the current input line to be edited. The



Page 10 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



following keystrokes corresponding to the following
functions are defined in the initialisation file sssshhhh....iiiinnnniiii.
The keywords in the initialisation file which provide the
functions are listed below:

RRRRiiiigggghhhhtttt
Move the cursor right one character

WWWWoooorrrrddddRRRRiiiigggghhhhtttt
Move the cursor right one word

LLLLeeeefffftttt Move the cursor left one character

WWWWoooorrrrddddLLLLeeeefffftttt
Move the cursor left one word

PPPPrrrreeeevvvviiiioooouuuussss
Get the previous command from the history file

NNNNeeeexxxxtttt Get the next command from the history file

IIIInnnnsssseeeerrrrtttt
Toggle insert/overwrite mode (note the shape of the
cursor changes to indicate the current mode)

DDDDeeeelllleeeetttteeeeRRRRiiiigggghhhhtttt
Delete the current character unless the cursor is at
the end of line when no action is taken

SSSSttttaaaarrrrtttt
Move the cursor to the start of the command

CCCCoooommmmpppplllleeeetttteeee
Attempt to complete the filename. The shell attempts
to complete the file name at the current cursor
position. The file name is delimited by white space
characters. If the shell is unable to complete the
file name (ie no match can be found in the appropriate
directory), the bell is rung. If a single match is
found, the new file name is displayed. If multiple
matches are found, the file name is replaced by the
longest non-unique part of the file name and the bell
is rung.

EEEEnnnndddd Move the cursor to the end of the command, unless the
first character of the command is a !!!!, in which case
the appropriate history search is done. The cursor is
placed at the end of the command line.

FFFFlllluuuusssshhhh
Delete to the end of the line




Page 11 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



SSSSccccaaaannnnBBBBaaaacccckkkkwwwwaaaarrrrdddd
Search backwards from the current history command for
the next match against the last history request or the
string currently in the command line if there has been
no previous history request.

SSSSccccaaaannnnFFFFoooorrrreeeewwwwaaaarrrrdddd
Search forewards from the current history command for
the next match against the last history request or the
string currently in the command line if there has been
no previous history request.

CCCClllleeeeaaaarrrr
Erase the complete line.

DDDDiiiirrrreeeeccccttttoooorrrryyyy
Display the file name list matching the partially
entered file name under the cursor. If no matches are
found the bell is rung. To display the whole
directory, enter the directory name followed by a slash
////. After the directory listing has been displayed, the
entered command line is redisplayed.

DDDDeeeelllleeeetttteeeeLLLLeeeefffftttt
Delete the character to the left of the cursor.

RRRReeeettttuuuurrrrnnnn
Execute the command line, unless the first character of
the command is a !!!!, in which case the appropriate
history processing is done. _T_h_i_s _i_s _t_h_e _a_c_t_u_a_l _k_e_y
_p_r_e_s_s_e_d _a_n_d _c_a_n_n_o_t _b_e _m_o_d_i_f_i_e_d _b_y _t_h_e _i_n_i_t_i_a_l_i_s_a_t_i_o_n
_f_i_l_e.

IIIInnnniiiittttiiiiaaaalllliiiissssaaaattttiiiioooonnnn FFFFiiiilllleeee
When the shell is run in interactive mode, the Command Line
Editing keys and other user configuration parameters are
read from the initialisation file _s_h._i_n_i. This shell looks
for this file in the same directory as the sssshhhh executable
which is running. It does not use the SSSSHHHHEEEELLLLLLLL environment
variable or search the directories in the PPPPAAAATTTTHHHH environment
variable. At present, there are two types of entry in this
file: keyboard configuration; and others. The entry is
contained in a single line and consists of a keyword (in
upper or lower case), white space, an equals symbols, white
space and one or two numeric values (see _s_t_r_t_o_l for valid
formats where _b_a_s_e parameter is zero), followed by an end of
line character.

For the keyboard entries, the numeric values give the MSDOS
Function 8 (Console Input without Echo) return values for
that entry. Note that extended codes (function keys)
require two calls to this function. The first call returns



Page 12 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



zero and the second the extended code. In the configuration
file, a first numeric value of zero indicates a extended
code and must be followed by a second value. A non-zero
first numeric value must not be followed by anything else on
the line.

Other entries must only have one numeric value. A zero
value disables the function and a non-zero value enables the
function. At present, there are two other functions:

BBBBeeeellllllll Enable/disable warning bells

HHHHaaaallllffffHHHHeeeeiiiigggghhhhtttt
Use full or halfheight block cursor to indicate Insert
mode

Invalid lines or lines beginning with a #### are ignored.

The following table gives the list of valid keywords and
their default values:
_________________________________________________________________________
Keyword First numeric Second numeric Actual Key
_________________________________________________________________________
KEYBOARD ENTRIES
ScanBackward 0 0x49 PAGE UP
ScanForeward 0 0x51 PAGE DOWN
Previous 0 0x48 UP ARROW
Next 0 0x50 DOWN ARROW
Left 0 0x4b LEFT ARROW
Right 0 0x4d RIGHT ARROW
WordRight 0 0x74 Control RIGHT ARROW
WordLeft 0 0x73 Control LEFT ARROW
Start 0 0x47 HOME
Clear 0 0x76 Control PAGE DOWN
Flush 0 0x75 Control END
End 0 0x4f END
Insert 0 0x52 INSERT
DeleteRight 0 0x53 DELETE
DeleteLeft 0x08 BACKSPACE
Complete 0 0x77 Control HOME
Directory 0 0x0f Shift TAB
_________________________________________________________________________
OTHER FUNCTIONS
Bell 0
HalfHeight 0
_________________________________________________________________________

EEEExxxxeeeeccccuuuuttttiiiioooonnnn
Each time a command is executed, the above substitutions are
carried out. If the command name matches one of the _S_p_e_c_i_a_l
_C_o_m_m_a_n_d_s listed below, it is executed in the shell process.
If the command name does not match a _S_p_e_c_i_a_l _C_o_m_m_a_n_d, but
matches the name of a defined function, the function is
executed in the shell process (note how this differs from

Page 13 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



the execution of shell procedures). The positional
parameters $$$$1111, $$$$2222, .... are set to the arguments of the
function. If the command name matches neither a _S_p_e_c_i_a_l
_C_o_m_m_a_n_d nor the name of a defined function, a new process is
created and an attempt is made to execute the command via
_e_x_e_c(2).

The shell parameter PPPPAAAATTTTHHHH defines the search path for the
directory containing the command. Alternative directory
names are separated by a semi-colon (;;;;). The default path
is ;;;;cccc::::////bbbbiiiinnnn;;;;cccc::::////uuuussssrrrr////bbbbiiiinnnn (specifying the current directory,
cccc::::////bbbbiiiinnnn, and cccc::::////uuuussssrrrr////bbbbiiiinnnn, in that order). Note that the
current directory is specified by a null path name, which
can appear immediately after the equal sign or between the
semi-colon delimiters anywhere else in the path list. If
the command name contains a //// or starts with xxxx:::: (where x is
a drive letter) the search path is not used; such commands
will not be executed by the restricted shell. Otherwise,
each directory in the path is searched for an executable
file. Executable files are indicated by a .exe or .com
extension. This extension is automatically supplied by the
shell and not have to be entered by the user.

If the file with a .com or .exe extension cannot be found in
the directory, the file is opened and first 512 characters
are read. If there are no characters in the block with a
value in the range 0 to 7, the file is assumed to be a
script file containing shell commands. Note that the shell
will check the file and if that file does not exist or is
not a script, it will try the file with an extension of ....sssshhhh.
If a ....sssshhhh file is found, that will be processed. A sub-shell
(given by the environment variable SSSSHHHHEEEELLLLLLLL) is spawned to read
it.

If the script file starts with the a line of the form #!
_i_n_t_e_r_p_r_e_t_e_r [_a_r_g_u_m_e_n_t_s], the interpreter is invoked instead
of the shell to process the script. Optional arguments can
be supplied in the script file which are passed before the
name of the script file. Thus, if the file _d_e_m_o contained
the following string as the first line

#! perl -sP

Entering _d_e_m_o _n_a_m_e would be equivalent to entering the _p_e_r_l
-_s_P _n_a_m_e at the command prompt. Note that no other
processing of the first line other that the separation (by
white space) into arguments is done.

If none of the above conditions for a executable file are
detected and a file with a .bat extension exists in the
directory, the command processor given by the CCCCOOOOMMMMSSSSPPPPEEEECCCC
environment variable is spawned to process the file. This



Page 14 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



is normally the standard MSDOS _c_o_m_m_a_n_d._c_o_m processor.

A parenthesized command is also executed in a sub-shell.

SSSSppppeeeecccciiiiaaaallll CCCCoooommmmmmmmaaaannnnddddssss
Input/output redirection is permitted for these commands.
File descriptor 1 is the default output location.

:::: No effect; the command does nothing. A zero exit code
is returned.
_l_e_t_t_e_r::::
Select the drive specified by _l_e_t_t_e_r.
.... _f_i_l_e
Read and execute commands from _f_i_l_e and return. The
search path specified by PPPPAAAATTTTHHHH is used to find the
directory containing _f_i_l_e.
bbbbrrrreeeeaaaakkkk [ _n ]
Exit from the enclosing ffffoooorrrr or wwwwhhhhiiiilllleeee loop, if any. If
_n is specified, break _n levels.
bbbbuuuuiiiillllttttiiiinnnn [ _a_r_g_s ... ]
Force the selection of the bbbbuuuuiiiillllttttiiiinnnn version of a
command. The builtin shell command selected by the
first _a_r_g_s value is executed with the parameters
defined by the remaining _a_r_g_ss. If no arguments are
given, a list of all _b_u_i_l_t_i_n commands is printed.

If the first argument is one of the following, the
processing of the builtin command in the following
arguments are changed as indicated:
----aaaa Set the following builtin commands to use builtin
version in preference to any function or external
versions.
----dddd Set the following builtin commands to use the
function or external version in preference to the
builtin version.
----ssss Display the current status of the following
builtin commands.
ccccoooonnnnttttiiiinnnnuuuueeee [ _n ]
Resume the next iteration of the enclosing ffffoooorrrr or wwwwhhhhiiiilllleeee
loop. If _n is specified, resume at the _n-th enclosing
loop.
ccccdddd [ _a_r_g ]
Change the current directory to _a_r_g. The shell
parameter HHHHOOOOMMMMEEEE is the default _a_r_g. The shell parameter
CCCCDDDDPPPPAAAATTTTHHHH defines the search path for the directory
containing _a_r_g. Alternative directory names are
separated by a semi-colon (;;;;). The default path is
<<<>>> (specifying the current directory). Note that
the current directory is specified by a null path name,
which can appear immediately after the equal sign or
between the semi-colon delimiters anywhere else in the
path list. If _a_r_g begins with a //// or xxxx:::: (where x is a



Page 15 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



drive letter), the search path is not used. Otherwise,
each directory in the path is searched for _a_r_g. The _c_d
command may not be executed by _r_s_h.
eeeecccchhhhoooo [ _a_r_g ... ]
Echo arguments. EEEEcccchhhhoooo writes its arguments separated by
blanks and terminated by a new-line on the standard
output. It also understands C-like escape conventions;
beware of conflicts with the shell's use of \\\\:
\\\\bbbb backspace
\\\\cccc print line without new-line
\\\\ffff form-feed
\\\\nnnn new-line
\\\\rrrr carriage return
\\\\tttt tab
\\\\vvvv vertical tab
\\\\\\\\ backslash
\\\\_n the 8-bit character whose ASCII code is the 1-, 2-
or 3-digit octal number _n, which must start with a
zero.

_E_c_h_o is useful for producing diagnostics in command
files and for sending known data into a pipe.

eeeevvvvaaaallll [ _a_r_g ... ]
The arguments are read as input to the shell and the
resulting command(s) executed.

eeeexxxxeeeecccc [ _a_r_g ... ]
The command specified by the arguments is executed in
place of this shell without creating a new process.
Input/output arguments may appear and, if no other
arguments are given, cause the shell input/output to be
modified.

eeeexxxxiiiitttt [ _n ]
Causes a shell to exit with the exit status specified
by _n. If _n is omitted the exit status is that of the
last command executed (an end-of-file will also cause
the shell to exit.)

eeeexxxxppppoooorrrrtttt [ _n_a_m_e ... ]
The given _n_a_m_es are marked for automatic export to the
_e_n_v_i_r_o_n_m_e_n_t of subsequently-executed commands. If no
arguments are given, a list of all names that are
exported in this shell is printed. Function names may
_n_o_t be exported.

ggggeeeettttoooopppptttt _o_p_t_s_t_r_i_n_g _n_a_m_e [ _a_r_g_s ... ]
Parse command options and write them to standard
output. GGGGeeeettttoooopppptttt is used to break up options in command
lines for easy parsing by shell procedures and to check
for legal options. _O_p_t_s_t_r_i_n_g is a string of recognized



Page 16 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



option letters (see _g_e_t_o_p_t(3C)); if a letter is
followed by a colon, the option is expected to have an
argument which may or may not be separated from it by
white space. The special option -------- is used to delimit
the end of the options. If it is used explicitly,
ggggeeeettttoooopppptttt will recognize it; otherwise, ggggeeeettttoooopppptttt will
generate it; in either case, ggggeeeettttoooopppptttt will place it at
the end of the options. Each option is preceded by a ----
and is in its own positional parameter; each option
argument is also parsed into its own positional
parameter.

The following code fragment shows how one might process
the arguments for a command that can take the options aaaa
or bbbb, as well as the option oooo, which requires an
argument:

set -- `getopt abo: $*`
if [ $? != 0 ]
then
echo $USAGE
exit 2
fi
for i in $*
do
case $i in
-a | -b) FLAG=$i; shift;;
-o) OARG=$2; shift 2;;
--) shift; break;;
esac
done

This code will accept any of the following as
equivalent:

cmd -aoarg file file
cmd -a -o arg file file
cmd -oarg -a file file
cmd -a -oarg -- file file

hhhhiiiissssttttoooorrrryyyy [ ----ddddeeeeiiii ]
The hhhhiiiissssttttoooorrrryyyy command, with no arguments, will print all
the commands that are currently saved in the shell's
history buffers. As new commands are executed, and
space in the buffers runs out, old commands will be
deleted. The hhhhiiiissssttttoooorrrryyyy commands prints out the stored
commands with sequence numbers. Negative numbered
commands, through command number zero, are commands
that were retrieved from the saved history file.
Commands starting at one were entered during the
current login session. If a saved command contains
embedded newlines, these will be printed out as the



Page 17 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



sequence \\\\nnnn, so that individual command stay on one
line.

The arguments changes the way the shell processes
history information as follows:

----dddd Disable the saving of commands in the history
file.

----eeee Enable the saving of commands in the history file.

----iiii Initialise the history file.

mmmmssssddddoooossss [ _n_a_m_e ... ]
The given _n_a_m_es are marked _m_s_d_o_s format and if the ----mmmm
flag is set, the values of the these _n_a_m_es are exported
to child processes with any slashes in the value
replaced by backslashes. If no arguments are given, a
list of all _m_s_d_o_s names is printed.

ppppwwwwdddd Print the current working directory.

rrrreeeeaaaadddd [ _n_a_m_e ... ]
One line is read from the standard input and the first
word is assigned to the first _n_a_m_e, the second word to
the second _n_a_m_e, etc., with leftover words assigned to
the last _n_a_m_e. The return code is 0 unless an end-of-
file is encountered.

rrrreeeeaaaaddddoooonnnnllllyyyy [ _n_a_m_e ... ]
The given _n_a_m_es are marked _r_e_a_d_o_n_l_y and the values of
the these _n_a_m_es may not be changed by subsequent
assignment. If no arguments are given, a list of all
_r_e_a_d_o_n_l_y names is printed.

rrrreeeettttuuuurrrrnnnn [ _n ]
Causes a function to exit with the return value
specified by _n. If _n is omitted, the return status is
that of the last command executed.

sssseeeetttt [ --------aaaaeeeeffffkkkkmmmmnnnnttttuuuuvvvvxxxx [ _a_r_g ... ] ]

----aaaa Mark variables which are modified or created for
export.

----eeee Exit immediately if a command exits with a non-
zero exit status.

----ffff Disable file name generation

----kkkk All keyword arguments are placed in the
environment for a command, not just those that



Page 18 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



precede the command name.

----mmmm For those variables marked as mmmmssssddddoooossss variables, the
values are exported to child processes with the
slashes replaced by backslashes. Most MSDOS
utilities do not care if a file name contains a
slash or backslash as a directory separator.
However, some like the _l_i_n_k_e_r require backslashes
in the value of the LLLLIIIIBBBB variable.

----nnnn Read commands but do not execute them.

----tttt Exit after reading and executing one command.

----uuuu Treat unset variables as an error when
substituting.

----vvvv Print shell input lines as they are read.

----xxxx Print commands and their arguments as they are
executed.

-------- Do not change any of the flags; useful in setting
$$$$1111 to ----.

Using ++++ rather than ---- causes these flags to be turned
off. These flags can also be used upon invocation of
the shell. The current set of flags may be found in
$$$$----. The remaining arguments are positional parameters
and are assigned, in order, to $$$$1111, $$$$2222, .... If no
arguments are given the values of all names are
printed.

sssshhhhiiiifffftttt [ _n ]
The positional parameters from $$$$nnnn++++1111 ... are renamed $$$$1111
.... If _n is not given, it is assumed to be 1.

sssswwwwaaaapppp [ _o_p_t_i_o_n_s ]
This command defines how the shell will handle
swapping. The options are

ooooffffffff Disable swapping. The shell remains in memory
whilst the child is running and reduces the
available memory by about 200K (depending on the
size of the environment and history).

oooonnnn Enable all devices. The shell will swap out to
either expanded or extended memory or to disk,
execute the command and then swap back in.
Whilest swapped, the shell reduces the available
memory by about 3K.




Page 19 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



eeeexxxxppppaaaannnndddd
Enable swapping to Expanded Memory. The EMS
driver must exist on your system for this to work.

eeeexxxxtttteeeennnntttt [ _s_t_a_r_t _a_d_d_r_e_s_s ]
Enable swapping to Extended Memory. If you have
an XMS driver on your system, the shell will use
the XMS driver. Otherwise, the BIOS Interrupt 15
interface is used. The optional start address
defines the based address in the Extended Memory
at which point the shell writes its swap area when
the BIOS interface is used. The default location
is _0_x_1_0_0_0_0_0.

ddddiiiisssskkkk Enable swapping to disk. The shell creates a
temporary file and saves itself in it. On
completion, the file is deleted. This is the
slowest method of swapping.

With no options, the current swapping options are
displayed.

tttteeeesssstttt _e_x_p_r or [[[[ _e_x_p_r ]]]]
Evaluate conditional expressions. TTTTeeeesssstttt evaluates the
expression _e_x_p_r and, if its value is true, returns a
zero (true) exit status; otherwise, a non-zero (false)
exit status is returned; tttteeeesssstttt also returns a non-zero
exit status if there are no arguments. The following
primitives are used to construct eeeexxxxpppprrrr:

----rrrr _f_i_l_e true if _f_i_l_e exists and is readable.

----wwww _f_i_l_e true if _f_i_l_e exists and is writable.

----xxxx _f_i_l_e true if _f_i_l_e exists and is executable.

----ffff _f_i_l_e true if _f_i_l_e exists and is a regular file.

----dddd _f_i_l_e true if _f_i_l_e exists and is a directory.

----cccc _f_i_l_e true if _f_i_l_e exists and is a character
special file.

----bbbb _f_i_l_e true if _f_i_l_e exists and is a block special
file.

----ssss _f_i_l_e true if _f_i_l_e exists and has a size greater
than zero.

----tttt [ _f_i_l_d_e_s ]
true if the open file whose file descriptor
number is _f_i_l_d_e_s (1 by default) is



Page 20 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



associated with a terminal device.

----zzzz _s_1 true if the length of the string _s_1 is
zero.

----nnnn _s_1 true if the length of the string _s_1 is
non-zero.

_s_1 ==== _s_2 true if strings _s_1 and _s_2 are identical.

_s_1 !!!!==== _s_2 true if strings _s_1 and _s_2 are _n_o_t
identical.

_s_1 true if _s_1 is _n_o_t the null string.

_n_1 ----eeeeqqqq _n_2 true if the integers _n_1 and _n_2 are
algebraically equal. Any of the
comparisons ----nnnneeee, ----ggggtttt, ----ggggeeee, ----lllltttt, and ----lllleeee may
be used in place of RRRR----eeeeqqqq.

These primaries may be combined with the following
operators:

!!!! unary negation operator.

----aaaa binary _a_n_d operator.

----oooo binary _o_r operator (----aaaa has higher
precedence than ----oooo).

(((( expr )))) parentheses for grouping.

Notice that all the operators and flags are separate
arguments to tttteeeesssstttt. Notice also that parentheses are
meaningful to the shell and, therefore, must be
escaped.

ttttrrrraaaapppp [ _a_r_g ] [ _n ] ...
The command _a_r_g is to be read and executed when the
shell receives signal(s) _n. (Note that _a_r_g is scanned
once when the trap is set and once when the trap is
taken.) Trap commands are executed in order of signal
number. Any attempt to set a trap on a signal that was
ignored on entry to the current shell is ineffective.
An attempt to trap on signal 11 (memory fault) produces
an error. If _a_r_g is absent all trap(s) _n are reset to
their original values. If _a_r_g is the null string this
signal is ignored by the shell and by the commands it
invokes. If _n is 0 the command _a_r_g is executed on exit
from the shell. The ttttrrrraaaapppp command with no arguments
prints a list of commands associated with each signal
number.



Page 21 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



ttttyyyyppppeeee [ _n_a_m_e ... ]
For each _n_a_m_e, indicate how it would be interpreted if
used as a command name.

uuuummmmaaaasssskkkk [ _n_n_n ]
The user file-creation mask is set to _n_n_n (see
_u_m_a_s_k(2)). If _n_n_n is omitted, the current value of the
mask is printed.

uuuunnnnsssseeeetttt [ _n_a_m_e ... ]
For each _n_a_m_e, remove the corresponding variable or
function. The variables PPPPAAAATTTTHHHH, PPPPSSSS1111, PPPPSSSS2222, and IIIIFFFFSSSS cannot
be unset.

vvvveeeerrrr Display the current version of the shell.

IIIInnnnvvvvooooccccaaaattttiiiioooonnnn
If the shell is invoked through _e_x_e_c(2) and the first
character of argument zero is ---- or the ----0000(zero) switch is in
the invokation line, commands are initially read from
////eeeettttcccc////pppprrrrooooffffiiiilllleeee....sssshhhh and from $$$$HHHHOOOOMMMMEEEE////pppprrrrooooffffiiiilllleeee....sssshhhh, if such files
exist. Thereafter, commands are read as described below,
which is also the case when the shell is invoked as ////bbbbiiiinnnn////sssshhhh.
The flags below are interpreted by the shell on invocation
only; Note that unless the ----cccc or ----ssss flag is specified, the
first argument is assumed to be the name of a file
containing commands, and the remaining arguments are passed
as positional parameters to that command file:

----cccc string If the ----cccc flag is present commands are read from
_s_t_r_i_n_g.
----ssss If the ----ssss flag is present or if no arguments
remain commands are read from the standard input.
Any remaining arguments specify the positional
parameters. Shell output (except for _S_p_e_c_i_a_l
_C_o_m_m_a_n_d_s) is written to file descriptor 2.
----iiii If the ----iiii flag is present or if the shell input
and output are attached to a terminal, this shell
is _i_n_t_e_r_a_c_t_i_v_e. In this case, the TERMINATE
signal is ignored and the INTERRUPT signal is
caught and ignored. In all cases, the QUIT signal
is ignored by the shell.
----rrrr If the ----rrrr flag is present, the shell is a
restricted shell.
----0000(zero) If the ----0000(zero) flag is present, this has the same
effect as starting the shell with the first
character of argument zero as a ---- (see above).

The remaining flags and arguments are described under the
sssseeeetttt command above.

RRRRsssshhhh OOOOnnnnllllyyyy



PPPPaaaaggggeeee 22222222 ((((pppprrrriiiinnnntttteeeedddd 11111111////6666////99990000))))






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



_R_s_h is used to set up login names and execution environments
whose capabilities are more controlled than those of the
standard shell. The actions of _r_s_h are identical to those
of _s_h, except that the following are disallowed:
changing directory (see _c_d(1)),
setting the value of $$$$PPPPAAAATTTTHHHH
specifying path or command names containing ////,
redirecting output (>>>> and >>>>>>>>).

The restrictions above are enforced after pppprrrrooooffffiiiilllleeee....sssshhhh is
interpreted.

When a command to be executed is found to be a shell
procedure, _r_s_h invokes _s_h to execute it. Thus, it is
possible to provide to the end-user shell procedures that
have access to the full power of the standard shell, while
imposing a limited menu of commands; this scheme assumes
that the end-user does not have write and execute
permissions in the same directory.

The net effect of these rules is that the writer of the
pppprrrrooooffffiiiilllleeee....sssshhhh has complete control over user actions, by
performing guaranteed setup actions and leaving the user in
an appropriate directory (probably _n_o_t the login directory).

The system administrator often sets up a directory of
commands (i.e., ////uuuussssrrrr////rrrrbbbbiiiinnnn) that can be safely invoked by
_r_s_h. Some systems also provide a restricted editor _r_e_d.

EEEEXXXXIIIITTTT SSSSTTTTAAAATTTTUUUUSSSS
Errors detected by the shell, such as syntax errors, cause
the shell to return a non-zero exit status. If the shell is
being used non-interactively execution of the shell file is
abandoned. Otherwise, the shell returns the exit status of
the last command executed (see also the eeeexxxxiiiitttt command above).

FFFFIIIILLLLEEEESSSS
/etc/profile.sh
$HOME/profile.sh
$TMP/sh*
??/sh.ini

CCCCRRRRIIIITTTTIIIICCCCAAAALLLL EEEERRRRRRRROOOORRRRSSSS
The Shell provide a Critical Error Handler (Interrupt 24)
similar to the standard MSDOS handler. In addition to the
standard message, the handler also displays the Extended
Error Code information in hexadecimal.

LLLLIIIIMMMMIIIIIIIITTTTAAAATTTTIIIIOOOONNNNSSSS
Any TSR (Terminate Stay Resident) programs must be loaded
before loading _S_h as the shell will overwrite the TSR when
it reloads itself after swapping out.



Page 23 (printed 11/6/90)






SSSSHHHH((((1111LLLL)))) MMMMSSSS----DDDDOOOOSSSS VVVVeeeerrrrssssiiiioooonnnn 1111....6666 ((((DDDDaaaattttaaaa LLLLooooggggiiiicccc LLLLiiiimmmmiiiitttteeeedddd)))) SSSSHHHH((((1111LLLL))))



SSSSEEEEEEEE AAAALLLLSSSSOOOO
cd(1), env(1), test(1), umask(1).
dup(2), exec(2), pipe(2), signal(2), umask(2), wait(2),
strtol(3), profile(4), environ(5) in the _U_N_I_X _S_y_s_t_e_m
_P_r_o_g_r_a_m_m_e_r _R_e_f_e_r_e_n_c_e _M_a_n_u_a_l.


















































Page 24 (printed 11/6/90)





  3 Responses to “Category : File Managers
Archive   : MS_SH164.ZIP
Filename : SH.MAN

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/