将expect_out的特定部分保存在变量中

时间:2017-02-28 19:04:35

标签: linux scripting expect

我有一个像这样的期待文件

#!/opt/tools/unsupported/expect-5.39/bin/expect

spawn ssh -l user ip
expect_after eof {exit 0}
set timeout 10
log_file /report.txt

expect "Password:" { send "pasword\r" }
expect "$ " { send "date\r" }

expect "$ " { send "readlink /somelink\r" }

set CCM_BUILD $expect_out(buffer)

send_log "CCM: $CCM_BUILD"

expect "$ " { send "date\r" }
expect "$ " { send "exit\r" }

readlink的结果将是一个像447这样的数字。这就是我想要的日志文件。但我得到的是:

Password:
Last login: Tue Feb 28 09:49:42 2017 from gbplr6gn01.genband.com^M
^[[?1034h-bash-4.1$ date
Tue Feb 28 09:50:42 CST 2017
-bash-4.1$ CCM: readlink/localdisk2/jenkins/jobs/CCM/jobs/Deploy_CCM_build/builds/lastSuccessfulBuild
447
-bash-4.1$ date
Tue Feb 28 09:50:42 CST 2017
-bash-4.1$

我怎样才能得到CCM:447?

1 个答案:

答案 0 :(得分:0)

更新,这有效:

#!/opt/tools/unsupported/expect-5.39/bin/expect

set timeout 10
match_max 256
expect_after eof {exit 0}
log_file -noappend report.txt

puts -nonewline "Fetching link from ip..."
spawn -noecho ssh -l user ip
log_user 0

expect "Password:" { send "pasword\r" }
expect "$ " { send "date\r" }

expect "$ " { send "readlink somelink\r" }

expect -r "readlink .*\r\n(.*)\r\n" {
    set CCM_BUILD $expect_out(1,string)
}

send_log "CCM: $CCM_BUILD"
puts ""
expect "$ " { send "date\r" }
expect "$ " { send "exit\r" }