0

我在一个过程中使用以下代码来获取 eth1 的 IP 地址并将其用作网关。我想要的另一件事是在用户范围之外使用这个变量(IP 地址)。

global my_gw_ip_address
expect "# "
send "ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{print \$1}' > prod_ip_base.txt\r"
expect "# "
send " my_internal_gw=`cat prod_ip_base.txt`\r"
expect "# "
send " echo \$my_internal_gw\r"
expect "root@cnode-pp81:~ "
set checking_buffer_out $expect_out(buffer)
regexp {(?:\d+\.){3}\d+} $checking_buffer_out my_gw_ip_address
puts "internal gw: $my_gw_ip_address\n"

该函数的输出是:
1. 该行send " echo \$my_internal_gw\r"返回正确的 IP 地址 192.168.138.50
2. 该行puts "internal gw: $my_gw_ip_address\n"返回 internal gw: 0。

谁能告诉我我做错了什么?为什么变量 $my_gw_ip_address 为 0?

4

1 回答 1

0

我解决问题。我应该在以下命令之间添加 sleep 1 。

改变

set checking_buffer_out $expect_out(buffer)
regexp {(?:\d+\.){3}\d+} $checking_buffer_out my_gw_ip_address

成为:

set checking_buffer_out $expect_out(buffer)
sleep 1 
regexp {(?:\d+\.){3}\d+} $checking_buffer_out my_gw_ip_address

阿米格尔

于 2012-10-02T10:56:54.580 回答