朋友们,我试图使用expect自动化路由,基本上它是我需要记录一些数据的特殊设备中的调试插件,访问这个调试插件,我的公司需要给我一个基于挑战键的响应键,它的很多主持人,我需要在星期五之前提供这个,这是我到目前为止所做的。
#!/usr/bin/expect -f
match_max 10000
set f [open "cimc.txt"]
set hosts [split [read $f] "\n"]
close $f
foreach host $hosts {
spawn ssh ucs-local\\marcos@10.2.8.2
expect "Password: "
send "Temp1234\r"
expect "# "
send "connect cimc $host\r"
expect "# "
send "load debug plugin\r"
expect "ResponseKey#>"
sleep 2
set buffer $expect_out(buffer)
set fid [open output.txt w]
puts $fid $buffer
close $fid
sleep 10
spawn ./find-chag.sh
sleep 2
set b [open "key.txt"]
set challenge [read $b]
close $b
spawn ./find-rep.sh $challenge
sleep 3
set c [open "rep.txt"]
set response [read $c]
close $c
puts Response-IS
send "\r"
expect "ResponseKey#> "
send "$response"
}
$ cat find-chag.sh
cat output.txt | awk 'match($0,"ChallengeKey"){print substr($0,RSTART+15,38)}' > key.txt
$ cat find-rep.sh
curl bla-blabla.com/CIMC-key/generate?key=$1 | grep ResponseAuth | awk 'match($0,"</td><td>"){print substr($0,RSTART+9,35)}' > rep.txt
我不知道如何使用regexp期望所以我把缓冲区输出放到一个文件并使用bash脚本,问题是我用spawn运行脚本后看起来像我的ssh会话丢失了,有没有人有任何提示?我应该使用其他东西而不是spawn来调用我的脚本吗?
答案 0 :(得分:2)
expect -re "my tcl compatible regular expression goes here"
应该允许你使用正则表达式。