#!/bin/bash
#!/usr/bin/expect -f
Umm ... não.
Basicamente, você quer que ambos os programas leiam o seu script e "façam a coisa certa" em relação a cada linha. Além dos problemas entre sincronizar a execução do script entre os intérpretes, é fácil ver que isso é impossível no momento em que temos uma linha que pode ser um comando válido em qualquer idioma.
Considere algo assim em seu exemplo.
set Username "user"
Na verdade, ele é válido no shell e em um script de expectativa. No shell, ele define os parâmetros posicionais $1
e $2
a Username
e user
, respectivamente. Em expect
, atribui outra coisa. Qual deles deveria fazer?
Ou divida seu script esperado em um arquivo diferente e chame-o do shell script, ou use o fato de que o Expect é executado no TCL, que deve permitir fazer loops e IO em si mesmo.
Felizmente, neste caso, há apenas um snippet esperado contido em um loop de shell no segundo bloco de código.
Então, faça um script de shell
#!/bin/bash
for i in 'seq 2 $NUMERODISP'; do
IP="$(...)"
expect -f somename.expect $IP
done
e um script de espera para chamar a partir do script de shell:
#!/usr/bin/expect -f
set IP [lindex $argv 0];
spawn telnet $IP
expect "Username:"
send "$Username\r"
...