我写了以下期望脚本:
set prompt {$}
set domain $::env(METEOR_DOMAIN)
puts "$domain"
spawn meteor mongo "$domain" --url
set pass "mypassword"
expect {
Password: {
send "$pass\r";
}
}
expect $prompt
puts "The output is '$expect_out(buffer)'."
和puts命令输出:
The output is ' mypassword
mongodb://client:56099867-e806-3a7a-e5b4-93127e0a3b42@production-db-a1.meteor.io:27017/db_meteor_com'.
我想象的是缓冲区中的内容,但我只想要第二部分(例如)mongo字符串
我如何只期望将最后一部分放在缓冲区中或仅检索缓冲区中的最后一部分以存储在环境变量中?
答案 0 :(得分:2)
您可以在密码前关闭stdout
输出,然后再将其重新打开。此外,您可以解析输出并提取mongo字符串。这是一种方法:
log_user 0
spawn ...
expect "Password:" {
send "mypassword\r"
}
log_user 1
...
if {[regexp -line {^mongodb:.*$} $expect_out(buffer) url]} {
set url [string trimright $url]
puts "URL is: '$url'"
}
根据文档,log_user 0
将关闭stdout
,log_user 1
会将其重新开启。