Sometimes we have to automate our steps through expect, run some commands in remote machine and capture the output of a command in a variable and use that variable in some other task.
So here is an example, how we can do that. The output from expect is always captured in expect_output(buffer)
and we have to parse this to get our expected result.
So first we have store this expect_output(buffer)
in a variable and which will have multiple lines along with our expected result.
Now we have to split that variable with "\n"
as delimiter , which will create an array with all the lines in it.
Again from that array we can use indexing to extract the result from a certain position.
Here is one example.
[code lang=’bash’]
#!/usr/bin/expect
set password somepass
set cmd “ls -Art /var/lib/docker/path_to_files/ | tail -n 1”
spawn ssh root@10.59.1.150
set prompt “#|%|>|\\\$ $”
expect {
“(yes/no)” {send “yes\r”;exp_continue}
“password: ” {send “$password\r”;exp_continue}
-re $prompt
}
send “$cmd\r”
expect “# ”
set outcome [split $expect_out(buffer) “\n”]
set filename [lindex $outcome 1]
expect eof
puts “##########################”
puts $filename
puts “##########################”
[/code]