The —c Flag

The —c flag provides a way of executing commands specified on the command line rather than in a script. This is handy when writing shell scripts, and you have a really short task for Expect that does not justify a separate script. For instance, the following shell command is similar to the timed—read command in Chapter 3(p. 77).

expect -c 'expect "\n" {send $expect_out(buffer)}'

Since no timeout is specified, the command waits up to 10 seconds. If the user types a string and presses return within the allotted time, the user’s string is returned, otherwise the empty string is returned. Notice that the entire argument to -c is quoted using single quotes. This tells the shell not to perform any variable expansion.

The -c flag can also be used to execute commands before a script takes control. For example, you can set the variable debug to 1 by invoking Expect from the shell as:

% expect -c "set debug 1" script

Inside the script, you can check the value of this variable:

if [info exists debug] {
    puts "debugging mode: on"
} else {
    set debug 0
}

# imagine more commands here

if $debug {puts "value of x = $x"}

When the script is run, it checks if debug is defined by evaluating "info exists“, a Tcl command which returns 1 if the variable is defined or 0 if it is not. If it is defined, the script can then test it later to determine if it should print debugging information internal to the script. The else clause sets debug to 0 just so that later a simple "if $debug" test can be used. ...

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.