The expect_user Command
In Chapter 3 (p. 72), you saw how to read from the user (i.e., standard input of the Expect process) using the expect
command. expect
reads from the standard input until a program is spawned. After that expect
reads from the spawned process.
expect
is analogous to send
. Both communicate with the user until a process is spawned, after which, both commands communicate with the spawned process. It should be no surprise that a command called expect_user
exists analogous to send_user
. expect_user
continues communicating with the user even after a process has been spawned.[35]
For example, the following fragment might appear in a script which has spawned ftp
and is about to transfer a file.
expect "ftp> " send_user "ftp is running. Press return to transfer file:" expect_user "\n" send "get foo\r"
The first command waits for ftp
’s prompt. The user is then prompted to press return, and expect
waits for it. As I mentioned in Chapter 3 (p. 72), the terminal driver translates the return to \n
while using expect
, and the same thing occurs with expect_user
. Once expect_user
is satisfied, the script sends a get
command to ftp
.
All of the expect
flags and patterns work with expect_user
. For example, the following code fragment queries the user for an RFC number. The fragment illustrates the use of regular expressions, timeout, and a break
action.
while 1 { send_user "Enter an RFC number: " expect_user { -re "(\[0-9]+)\n" break -re (.*)\n { send_error "$expect_out(1,string) ...
Get Exploring Expect now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.