expect_out(buffer) 未分配

expect_out(buffer) not being assigned

我需要一些关于我正在编写的 expect 脚本的帮助,以便从我无法直接访问的路由器获取信息。这是我的代码:

    expout=$(
        expect << EOD
                log_user 0
                set timeout 20
                spawn ssh router1
                expect "router1#" { send "ssh -l foo 0.0.0.0\r" }
                expect "Password:" { send "*********\r" }
                expect "router2#" { send "show ip interface br\r \r" }
                set output $expect_out(buffer)
                expect "router2#" { send "exit\r" }
                expect "router1#" { send "exit\r" }
                puts $output
                expect eof
EOD
)

我希望将该输出保存到 bash 变量以供进一步操作。如果我在脚本中启用 exp_internal 1,它会将我想要的分配给 expect_out(buffer)。如果我做错了什么,你能告诉我吗?

谢谢!

因为 heredoc 未被引用,shell 将 $expect_out 扩展为空字符串 before expect launches。然后expect只看到set output (buffer)

引用文档:

expect=$(
    expect << 'EOD'
    # ........^...^
        ... expect code
EOD
)

https://www.gnu.org/software/bash/manual/bashref.html#Here-Documents