0

我写了以下期望脚本:

    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字符串

如何让期望仅将最后一部分放入缓冲区或仅检索缓冲区中的最后一部分以存储在环境变量中?

4

1 回答 1

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将其重新打开。

于 2013-07-26T04:46:26.710 回答