программный диалог с интерактивными программами, Версия 5 (programmed dialogue with interactive programs, Version 5)
Предостережение (Caveat)
Extensions may collide with Expect's command names. For example,
send
is defined by Tk for an entirely different purpose. For
this reason, most of the Expect
commands are also available as
"exp_XXXX". Commands and variables beginning with "exp",
"inter", "spawn", and "timeout" do not have aliases. Use the
extended command names if you need this compatibility between
environments.
Expect
takes a rather liberal view of scoping. In particular,
variables read by commands specific to the Expect
program will be
sought first from the local scope, and if not found, in the
global scope. For example, this obviates the need to place
"global timeout" in every procedure you write that uses expect
.
On the other hand, variables written are always in the local
scope (unless a "global" command has been issued). The most
common problem this causes is when spawn is executed in a
procedure. Outside the procedure, spawn_id no longer exists, so
the spawned process is no longer accessible simply because of
scoping. Add a "global spawn_id" to such a procedure.
If you cannot enable the multispawning capability (i.e., your
system supports neither select (BSD *.*), poll (SVR>2), nor
something equivalent), Expect
will only be able to control a
single process at a time. In this case, do not attempt to set
spawn_id, nor should you execute processes via exec while a
spawned process is running. Furthermore, you will not be able to
expect
from multiple processes (including the user as one) at the
same time.
Terminal parameters can have a big effect on scripts. For
example, if a script is written to look for echoing, it will
misbehave if echoing is turned off. For this reason, Expect
forces sane terminal parameters by default. Unfortunately, this
can make things unpleasant for other programs. As an example,
the emacs shell wants to change the "usual" mappings: newlines
get mapped to newlines instead of carriage-return newlines, and
echoing is disabled. This allows one to use emacs to edit the
input line. Unfortunately, Expect cannot possibly guess this.
You can request that Expect not override its default setting of
terminal parameters, but you must then be very careful when
writing scripts for such environments. In the case of emacs,
avoid depending upon things like echoing and end-of-line
mappings.
The commands that accepted arguments braced into a single list
(the expect
variants and interact
) use a heuristic to decide if
the list is actually one argument or many. The heuristic can
fail only in the case when the list actually does represent a
single argument which has multiple embedded \n's with non-
whitespace characters between them. This seems sufficiently
improbable, however the argument "-nobrace" can be used to force
a single argument to be handled as a single argument. This could
conceivably be used with machine-generated Expect code.
Similarly, -brace forces a single argument to be handle as
multiple patterns/actions.