ACC SHELL
emulate [ -LR ] [ {zsh|sh|ksh|csh} [ -c arg ] ]
Without any argument print current emulation mode.
With single argument set up zsh options to emulate the specified
shell as much as possible. csh will never be fully emulated.
If the argument is not one of the shells listed above, zsh will
be used as a default; more precisely, the tests performed on the
argument are the same as those used to determine the emulation
at startup based on the shell name, see the section `Compatibil-
ity' in zshmisc(1) .
If the -R option is given, all options are reset to their
default value corresponding to the specified emulation mode,
except for certain options describing the interactive environ-
ment; otherwise, only those options likely to cause portability
problems in scripts and functions are altered. If the -L option
is given, the options LOCAL_OPTIONS and LOCAL_TRAPS will be set
as well, causing the effects of the emulate command and any
setopt and trap commands to be local to the immediately sur-
rounding shell function, if any; normally these options are
turned off in all emulation modes except ksh. The -L and -c are
mutually exclusive.
If -c arg is given, evaluate arg while the requested emulation
is temporarily in effect. The emulation and all options will be
restored to their original values before emulate returns. The
-R flag may be used.
Use of -c enables `sticky' emulation mode for functions defined
within the evaluated expression: the emulation mode is
associated thereafter with the function so that whenever the
function is executed the emulation (respecting the -R flag, if
present) and all options are set before entry to the function,
and restored after exit. If the function is called when the
sticky emulation is already in effect, either within an `emulate
shell -c' expression or within another function with the same
sticky emulation, entry and exit from the function do not cause
options to be altered (except due to standard processing such as
the LOCAL_OPTIONS option).
For example:
emulate sh -c 'fni() { setopt cshnullglob; }
fno() { fni; }'
fno
The two functions fni and fno are defined with sticky sh emula-
tion. fno is then executed, causing options associated with
emulations to be set to their values in sh. fni then calls fno;
because fno is also marked for sticky sh emulation, no option
changes take place on entry to or exit from it. Hence the
option cshnullglob, turned off by sh emulation, will be turned
on within fni and remain on on return to fno. On exit from fno,
the emulation mode and all options will be restored to the state
they were in before entry to the temporary emulation.
The documentation above is typically sufficient for the intended
purpose of executing code designed for other shells in a suit-
able environment. More detailed rules follow.
1. The sticky emulation environment provided by `emulate
shell -c' is identical to that provided by entry to a
function marked for sticky emulation as a consequence of
being defined in such an environment. Hence, for exam-
ple, the sticky emulation is inherited by subfunctions
defined within functions with sticky emulation.
2. No change of options takes place on entry to or exit from
functions that are not marked for sticky emulation, other
than those that would normally take place, even if those
functions are called within sticky emulation.
3. No special handling is provided for functions marked for
autoload nor for functions present in wordcode created by
the zcompile command.
4. The presence or absence of the -R flag to emulate corre-
sponds to different sticky emulation modes, so for exam-
ple `emulate sh -c', `emulate -R sh -c' and `emulate csh
-c' are treated as three distinct sticky emulations.
ACC SHELL 2018