El otro día estaba leyendo UbuntuLife (blog que visito casi a diario), cuando me topé con este artículo sobre expect, que voy a complementar con otra herramienta, autoexpect.
EXPECT
Resulta que ya conocía esta herramienta de hace unos años. Expect permite crear scripts que responden a la shell, a la consola de comandos, siendo casi interactivos. Con él podemos hacer un script que se conecte a un ftp y espere a que el ftp le pida datos de usuario y contraseña. El script estará programado para responder cuando se le pregunte, pero no antes.
Antes a la hora de hacer un script para esto, la gente solía recurrir a hacks como:
ftp dirección
sleep 5
echo "mi usuario"
sleep 5
echo "mi password"
...
Esta solución puede fallar (dependiendo de si el ftp está saturado, tu ancho de banda…), además no es eficiente, ni elegante.
AUTOEXPECT
Ahora bien, en su día descubrí que existía una herramienta llamada autoexpect. Esta herramienta es un shell script (no un binario) que permite generar scripts de expect sin tener ni idea de cómo se programan, ¡genial!
Mucha gente desconoce….
….su existencia porque las distribuciones al instalar expect no ponen autoexpect en el PATH del sistema, es decir, que dejan el script en una ruta «escondida», sino recuerdo mal era algo como /usr/share/doc/expect-{version}/examples/
Así que me puse a buscarlo en Ubuntu Feisty 7.04. Pero resulta que cuando instalo expect, ya no pone autoexpect en esa ruta. Lo han quitado del paquete, porque autoexpect no se mantiene (actualiza) desde el 1995, es decir, unos cuantos años. Sin embargo, funcionaba perfectamente. Así que me pongo a buscar paquetes antiguos por la red de expect-dev y finalmente doy con el diamante en bruto. Lo he subido para que podáis descargarlo.
Pincha aquí para descargar autoexpect
INSTALACIÓN
Vale, sí, es un shell script, ¿qué se supone que hay que instalar? Bueno, pues hay que ponerlo en una ruta del $PATH. Así que una vez lo bajáis, lo pegáis o movéis a:
sudo cp /ruta/donde/lohayas/descargado/autoexpect /usr/bin/
Ahora instalamos también expect.
sudo apt-get install expect
Ahora la mejor forma de saber que opciones dispone autoexpect es leer su página man. Ahí vienen documentadas a fondo todas las opciones y vale la pena leerlo si lo vais a usar. Yo os pongo un ejemplo que he hecho:
autoexpect -f ssh.exp -p ssh miguel@servidor
Después de poner esto en la shell. Ejecuto los comandos que yo quiera. Mientras tanto autoexpect va a estar vigilando lo que hago para que al salir se la sesión ssh generar un script que se va a llamar ssh.exp que va a utilizar solamente la última línea del prompt (de lo que salga por pantalla) para reconocer órdenes (recomendable), y que va a reproducir los comandos que yo haya ejecutado, en este caso, descargar algún fichero a mi máquina.
Es muy importante tener en cuenta, que debemos correr el menor número posible de comandos, y que deben arrojar como resultado siempre lo mismo para funcionar correctamente.
Después de esto, siempre que quiera bajarme esos ficheros, haré:
./ssh.exp
Espero que haya quedado más o menos claro. Este es un tema propio de administradores de sistemas, de entre los que muchos desconocen la existencia de expect, pero no tendrán problemas para entender esto.
Un saludo para superpiwi
Technorati Tags: expect autoexpect ubuntu feisty scripts
3 comentarios
Comments feed for this article
27 octubre, 2007 a 5:55 pm
superpiwi
interesante. no lo conocia. descargando… ^^
1 junio, 2008 a 12:42 pm
Tip Consola: Shell Script para reiniciar el router « Ubuntu Life
[…] Veamos como automatizar ahora, el reboot de el router mediante un shell script. Para automatizar la ejecucion del shell script y no tener que pasarle a mano el usuario y la password, sino que me las lea desde la consola yo he usado “expect”. expect es un interprete de comandos que nos permite automatizar secuencias de acciones, de esta manera podemos evitar el tener que introducir comandos, solo lo hacemos la primera vez y el resto de veces se ejecuta ya lo que hubieramos realizado (de expect ya hable aunque por desgracia no tengo el tutorial a mano). Podeis encontrar mas informacion aqui. […]
2 enero, 2012 a 2:15 pm
Reinicio de router » CUCOS
[…] Veamos como automatizar ahora, el reboot de el router mediante un shell script. Para automatizar la ejecucion del shell script y no tener que pasarle a mano el usuario y la password, sino que me las lea desde la consola yo he usado “expect”. expect es un interprete de comandos que nos permite automatizar secuencias de acciones, de esta manera podemos evitar el tener que introducir comandos, solo lo hacemos la primera vez y el resto de veces se ejecuta ya lo que hubieramos realizado (de expect ya hable aunque por desgracia no tengo el tutorial a mano). Podeis encontrar mas informacion aqui. […]