#!/usr/bin/expect
#
# Recursive procedures in expect for capturing out-of-order output.
# http://blog.ooz.ie/2009/11/recursive-procedures-in-expect-for.html
# Slawek Ligus <root@*.ie>
#
proc show_usage {} {
puts "Usage: ./non-ordered.exp 'desired output items'"
}
proc get_output {} {
set timeout 1
upvar desired_output desired_output
set output_regex [join $desired_output "|"]
set actual_output ""
expect {
-re $output_regex {
return [concat [get_output] $expect_out(0,string)]
}
}
return $actual_output
}
proc return_missing {desired acquired} {
set missing_items ""
foreach item $desired {
if {[lsearch $acquired $item]==-1} {
lappend missing_items $item
}
}
return $missing_items
}
# The script takes exactly one argument.
if {$argc != 1} {
show_usage
exit 1
}
set desired_output [lindex $argv 0]
spawn ./script.sh
set output [get_output]
set missing_items [return_missing $desired_output $output]
puts "Desired output: $desired_output"
puts "Acquired output: $output"
puts "Missing items:$missing_items"