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
我需要一些关于我正在编写的 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