仅在expect_out缓冲区中的提示中存储/检索最后一行

时间:2013-07-26 03:59:59

标签: bash shell tcl expect

我写了以下期望脚本:

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

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

1 个答案:

答案 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将关闭stdoutlog_user 1会将其重新开启。