I am new to using expect. I am running the below code to get the token from a server:
set timeout 20
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
# -- is used to disable the interpretion of flags by Expect.
expect {
    -re "OK"        {
        send_user "** Enter command to get the token. **\n"
        send -- "-t $switchtype -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
    }
    timeout {
        send_user "** Session timeout on $serverip upon LOGIN**\n"
        exit -1
    }
}
sleep 1
expect {
    -indices -re "\n.+\n(.+\@)" {
        set token $expect_out(1,string)
        send_user "**Get the token $token **\n"}
    timeout {
        send_user "** Session timeout upon getting token**"
        exit -1}
}
The code is working fine for most of the switches, however for few it is failing by returning code RE006. Therefore, for those switches I need to change the switch type. I have made the below change:
set timeout 60
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
# -- is used to disable the interpretion of flags by Expect.
expect {
    -re "OK"        {
        send_user "** Enter command to get the token. **\n"
        send -- "-t $switchtype -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
    }
    timeout {
        send_user "** Session timeout on $serverip upon LOGIN**\n"
        exit -1
    }
}
sleep 1
expect {
    -re "RE006"        {
        send_user "** Enter command to get the token. **\n"
        send -- "-t $switchtype1 -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
    }
    timeout {
        send_user "** Session timeout on $serverip upon LOGIN**\n"
        exit -1
    }
}
expect {
    -indices -re "\n.+\n(.+\@)" {
        set token $expect_out(1,string)
        send_user "**Get the token $token **\n"}
    timeout {
        send_user "** Session timeout upon getting token**"
        exit -1}
}
Now, this works fine for the previously failed switches. How can I handle both cases?


@, and the other case is some text with RE006 there is a lot of scope for overlap. Having randomsleep 1in an expect script is also a bad sign!