我有以下期望脚本:
- SSH 到主机
- 如果需要,接受用户的密码
- 一旦 ssh 成功(出现提示),设置环境变量
- 再次返回提示符后,运行程序进行网络测试
- 再次返回提示符后,退出期望并关闭 ssh 会话
#!/usr/bin/expect
set hostname [lindex $argv 0]
set working_dir [lindex $argv 1]
set package [lindex $argv 2]
set tcl_test $working_dir/$package.tcl
set config $working_dir/$package.config
set logdir $working_dir/$package
set timeout 30
set prompt "\~\\\]\\\$"
eval spawn ssh $hostname
expect {
-re "(yes/no)" {send "yes\r"}
-re "password\:" {
interact {
-o
-re $prompt {send "export VARIABLE1=$working_dir\"\r"}
-re $prompt {send "issue-test-command -config $config -module $tcl_test\r"}
}
}
}
密码匹配和交互工作正常。一旦 $prompt 匹配,就会发出环境变量导出命令:
-re $prompt {send "export VARIABLE1=$working_dir\"\r"}
这是正确的,但不是继续前进:
-re $prompt {send "issue-test-command -config $config -module $tcl_test\r"}
读取同一行,再次匹配模式并执行相同的命令。这导致发出相同命令的永久循环。
如何强制交互移动到下一行,或者使用不同的内置期望来实现我所追求的?