Expect + telnet problem

Phil Meyer pmeyer at themeyerfarm.com
Wed Sep 9 18:17:52 UTC 2009


Arthur Meeks Meeks wrote:
> Hello,
>
> I'm creating an expect script to:
>
> telnet router
> execute command
> exit
>
> This seems to be quite easy when you have 1 router, the problem is I 
> have a list of 40 routers, so I thought about creating a expect script 
> but I have gotten some problems.
> The first one is...how to include all the machines?
> I thought about something like: for d in $(cat router_list); do 
> expect_script $d;done
>
> And if that worked, the script would take $d and do:
>
> telnet $d
> execute my command
> exit
>
> But I don't know how to accomplish that as the script and the "expect 
> --exact" output are different, one per router, basically because:
> expect -exact "telnet router23\r
> Trying 192.168.33.12...\r
> Connected to router23.test.\r
>
> Changes in all the routers, I have tried to delete that whole 
> paragraph so it only expects "Login", but it doesn't work.
>
> And also...how to include the script in the "for" loop?.
>
> Any idea will be appreciated.
>
> Arthur.
>
>
>


If you are up to a little perl, the expect perl module will do what you 
want.

However, its not impossible to use shell tricks to do what you want.

Generate a list:

list=`cat my_list`

for name in $list
do
    expect ... $name ...
done

Or you might want to mix that with another script to generate an expect 
script:

#!/bin/sh

list=`cat my_list`

for name in $list
    do
    cat > /tmp/script << _EOF
here is
my expect
script including $name
_EOF
   
    expect < /tmp/script

done


But in perl, you could do it all at once.

Good luck!




More information about the users mailing list