lunes, 18 de febrero de 2008

Creacion de scripts interactivos sin supervision del usuario

Creacion de scripts interactivos sin supervision del usuario

Publicado por Gnu Linux on 14 de Junio de 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.


Actualizaciçon 15/12/2011

Tambiçen existe el "autoexpect" y para finalizar la grabaciçon CtrlD ¿mirar manual



`

No hay comentarios:

Publicar un comentario