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.