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) ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access