Pregunta

I am using the following code within a procedure in order to get an IP address of eth1 and use it as a gateway. Another thing I want is to use this variable (the IP address) outside, in the user scope.

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"

the output of the function is:
1. the line send " echo \$my_internal_gw\r" returns the correct IP address 192.168.138.50
2. the line puts "internal gw: $my_gw_ip_address\n" returns internal gw: 0.

can anyone please tell me what I do wrong? Why the variable $my_gw_ip_address is 0?

¿Fue útil?

Solución

I solve the problem. I should have added sleep 1 between the following commands.

change

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

to be:

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

Amigal

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top