Regex 从expect shell获取值并在外部使用

Regex 从expect shell获取值并在外部使用,regex,expect,proc,Regex,Expect,Proc,为了获得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_bas

为了获得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.行
发送“echo\$my\u internal\u gw\r”
返回正确的IP地址192.168.138.50
2.行
放置“内部gw:$my\u gw\u ip\u address\n”
返回内部gw:0

谁能告诉我我做错了什么吗?为什么变量$my\u gw\u ip\u address是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
友好的