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. ...
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