Creacion de scripts interactivos sin supervision del usuario
Publicado por Gnu Linux en 14 dUTC Junio dUTC 2007
Hola, hoy os quería hablar de una herramienta que he encontrado por casualidad navegando por la red. Se llama “expect” y según su descripción viene a ser un “dialogo programado con procesos interactivos”.
¿Cuantas veces, realizando vuestros scripts en bash, se os requería la contraseña de Super Usuario y teníais que introducirla a mano? A primera vista tendríais que ejecutar ese script con privilegios de root, con el riesgo que eso conlleva…
Para evitar ese riesgo aparece expect. Expect os permite ejecutar comandos y esperar una salida determinada por stdout o consola, como queráis llamarlo. Una vez recibe esa cadena, continua con el resto de instrucciones y permite enviar señales por stdin o teclado.
Así a primera vista me parece un modo de comunicación síncrona entre varios procesos. Las funciones principales que usaremos, que no digo que sean las únicas, serán:
- spawn: Permite la ejecución de comandos por consola.
- expect: Espera por una cadena predefinida en stdout.
- send: Envía comandos por stdin con el proceso.
Si esta herramienta la combinamos con scripts nuestros, realmente se pueden hacer autenticas virguerias. A continuación os voy a poner un ejemplo muy básico que me he creado para subir ficheros por sftp con otro equipo:
#!/usr/bin/expect
spawn sftp 192.168.1.2
expect “mygnulinux@192.168.1.2’s password:”
send “mygnulinux\r”
expect “sftp>”
send “cd /home/mygnulinux\r”
expect “sftp>”
send “put *\r”
expect “sftp>”
send “exit\r”
expect eof
Nota: Al finalizar pondremos “expect eof” para terminar la ejecución de expect. Cuando enviamos una señal debemos poner al final ‘\r’ que viene a ser el retorno de carro o intro para que sea aceptada en la linea de comandos.
Si alguien tiene algo nuevo que añadir o bien encuentra algún fallo me gustaría me corrigiese en comentarios ya que no lo he probado mucho y no se en realidad cuanto poder tiene este comando.
Saludos: Lupo
Resete-e escribió
Muy bueno, la verdad que me viene muy bien para una serie de scripts de backups y demás. Lástima que ahora esté de exámenes, espero acordarme en cuanto tenga un poco más de tiempo.
Muchas gracias.
programame.net escribió
Creacion de scripts interactivos sin supervision del usuario
¿Cuantas veces, realizando vuestros scripts en bash, se os requería la contraseña de Super Usuario y teníais que introducirla a mano? A primera vista tendríais que ejecutar ese script con privilegios de root, con el riesgo que eso conlleva… Vamo…
cesar escribió
Estamos tos igual, con los exámenes. A ver si los acabamos y nos ponemos con el cursillo de Qt.
Saludos
deby escribió
yo he utilizado expect en multitud de ocasiones para interactuar via telnet o tftp con otros equipos, y funciona muy bien.
Recopilacion de posts « mygnuLINUX escribió
[...] Creacion de scripts interactivos sin supervision del usuario [...]
Creacion de scripts interactivos sin supervision del usuario - Noticias externas escribió
[...] ¿Cuantas veces, realizando vuestros scripts en bash, se os requería la contraseña de Super Usuario y teníais que introducirla a mano? A primera vista tendríais que ejecutar ese script con privilegios de root, con el riesgo que eso conlleva… Vamos a intentar evitar esos problemas!!!» noticia original [...]
Javier Arias escribió
Por si les sirve este script:
#!/usr/bin/expect
set ip_env [lindex $argv 0]
set us_env [lindex $argv 1]
set ps_env [lindex $argv 2]
set darch_env [lindex $argv 3]
set narch_env [lindex $argv 4]
set darch_rec [lindex $argv 5]
spawn sftp $us_env@$ip_env
expect “$us_env@$ip_env’s password:”
send “$ps_env\r”
expect “sftp>”
send “cd $darch_rec\r”
expect “sftp>”
send “put $darch_env$narch_env\r”
expect “sftp>”
send “exit\r”
expect eof