Regular Expressions
The interact
command provides the ability to match regular expressions just like the expect
command. The syntax is identical. The pattern is preceded by the -re
flag. For example, the following sends an X
each time the user presses a tilde followed by any other character.
interact -re "~." {send "X"}
The tilde matches a tilde while the period matches any other character. Other special characters work as before.
When using regular expressions, it is possible to find out what characters were typed. Similar to the expect
command, the interact
command writes its matches to the array interact_out
. If the characters ~abc
were entered in the previous example, interact_out(0,string)
would be set to ~a
. The bc
would be sent on to the spawned process and would not be saved anywhere.
As before, the -indices
flag causes indices to be saved as well. Using this flag, the complete set of assignments would be:
set interact_out(0,start) "0" set interact_out(0,end) "1" set interact_out(0,string) "~a"
The number 0 plays the same role that it did in the expect
command. Parentheses can be used to pick out submatches. Matching strings are stored in interact_out
using the indices 1 through 9.
There is no buffer
element in interact_out
as there is in expect_out. The reason for this is that the interact
command processes unmatched characters as they arrive. So by the time a match occurs, unmatched characters are no longer present. Hence, matches always start with the first character remaining ...
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.