Una Mirada al Comando Linux/Unix Espere

Una Mirada al Comando Linux/Unix Espere

Una Mirada al Comando Linux/Unix Espere

VALORACIÓN DEL ARTÍCULO:
5/5


Expect es un programa que habla con otros programas interactivos según un guión. Siguiendo el guión, Expect sabe lo que se puede esperar de un programa y cuál debe ser la respuesta correcta. Un lenguaje interpretado proporciona estructuras de control de ramificación y de alto nivel para dirigir el diálogo. Además, el usuario puede tomar el control e interactuar directamente cuando lo desee, devolviendo posteriormente el control al script.

Expectk es una mezcla de Expect y Tk. Se comporta igual que Expectativas y el deseo de Tk. Expect también se puede utilizar directamente en C o C++ sin Tcl.

El nombre «Expect» proviene de la idea de enviar/esperar secuencias popularizadas por uucp, kermit y otros programas de control de módem. Sin embargo, a diferencia de uucp, Expect está generalizado de modo que puede ejecutarse como un comando a nivel de usuario con cualquier programa y tarea en mente. Expect puede hablar con varios programas al mismo tiempo.

Qué puede hacer Expect Expect

Por ejemplo, aquí hay algunas cosas que el comando expect puede hacer:

  • Haga que su ordenador le devuelva la llamada para que pueda iniciar sesión sin tener que pagar la llamada.
  • Inicie un juego y si la configuración óptima no aparece, reinicie una y otra vez) hasta que lo haga, y luego entregue el control a usted.
  • Ejecutar fsck, y en respuesta a sus preguntas, responder «sí» o «no» o devolverle el control, basándose en criterios predeterminados.
  • Conéctese a otra red y recupere automáticamente su correo para que parezca como si hubiera sido enviado originalmente a su sistema local.
  • Transportar variables de entorno, directorio actual o cualquier tipo de información a través de rlogin, telnet, tip, su o chgrp

Hay una variedad de razones por las que el shell no puede realizar estas tareas. Todo es posible con Expect.

En general, Expect es útil para ejecutar cualquier programa que requiera interacción entre el programa y el usuario. Todo lo que se necesita es que la interacción pueda ser caracterizada programáticamente. Expect también puede devolver el control al usuario sin detener el programa que está siendo controlado. Del mismo modo, el usuario puede devolver el control al script en cualquier momento.

Uso

Expect lee cmdfile para obtener una lista de comandos a ejecutar. Expect puede ser invocado implícitamente en sistemas que soportan la notación #! marcando el script como ejecutable y haciendo la primera línea en el script:

#!/usr/local/bin/expect -f

Por supuesto, el camino debe describir con precisión dónde vive Expect. /usr/local/bin es sólo un ejemplo.

El indicador -c precede a un comando que se ejecutará antes que cualquier otro en el script. El comando debe ser citado para evitar que el shell lo rompa. Esta opción puede utilizarse varias veces. Se pueden ejecutar múltiples comandos con una sola -c separándolos con punto y coma. Los comandos se ejecutan en el orden en que aparecen. Cuando se utiliza Expectk, esta opción se especifica como -comando.

El indicador -d permite alguna salida de diagnóstico, que informa principalmente sobre la actividad interna de comandos como esperar e interactuar. Esta bandera tiene el mismo efecto que «exp_internal 1» al principio de un script Expect, además de que se imprime la versión de Expect.

El indicador -D permite un depurador interactivo. Un valor entero debe seguir. El depurador tomará el control antes del siguiente procedimiento Tcl si el valor es distinto de cero o si se pulsa una ^C o se alcanza un punto de interrupción, o si aparece otro comando de depuración apropiado en el script. Cuando se utiliza Expectk, esta opción se especifica como Debug.

El indicador -f precede a un archivo desde el cual se pueden leer los comandos. La propia bandera es opcional, ya que sólo es útil cuando se utiliza la notación #!, de modo que se pueden proporcionar otros argumentos en la línea de comandos. Cuando se utiliza Expectk, esta opción se especifica como -archivo.

Por defecto, el archivo de comando se lee en la memoria y se ejecuta en su totalidad. Ocasionalmente es deseable leer los archivos línea por línea. Para forzar que los archivos arbitrarios sean manejados de esta manera, use el indicador -b. Cuando se utiliza Expectk, esta opción se especifica como -buffer.

Si la cadena «-» se suministra como nombre de archivo, se lee la entrada estándar en su lugar. Utilice «./-» para leer de un archivo llamado realmente «-«.

La bandera -i hace que Espere que los comandos se soliciten de forma interactiva en lugar de leerlos desde un archivo. La indicación finaliza con la orden de salida o con EOF. El indicador -i se asume si no se utiliza ni un fichero de comandos ni -c. Cuando se utiliza Expectk, esta opción se especifica como -interactiva.

— puede utilizarse para delimitar el final de las opciones. Esto es útil si desea pasar un argumento similar a una opción a su script sin que Expect lo interprete. Esto puede ser colocado en la línea #! para prevenir cualquier interpretación de Expect. Por ejemplo, lo siguiente dejará los argumentos originales incluyendo el nombre del script en la variable argv .

#!/usr/local/bin/expect --

Tenga en cuenta que las convenciones usuales getopt(3) y execve(2) deben ser observadas al agregar argumentos a la línea #!

El archivo $exp_library/expect.rc se obtiene automáticamente si está presente, a menos que se utilice el indicador -N. (Cuando se utiliza Expectk, esta opción se especifica como -NORC.) Inmediatamente después de esto, el archivo ~/.expect.rc se obtiene automáticamente, a menos que se utilice el indicador -n. Si se define la variable de entorno DOTDIR, se trata como un directorio y desde allí se lee .expect.rc. Cuando se utiliza Expectk, esta opción se especifica como -norc. Esta determinación de fuente de aprovisionamiento sólo se produce después de ejecutar cualquier indicador -c.

-v causa Espere imprimir su número de versión y salir. El indicador correspondiente en Expectk, que utiliza nombres de indicador largos, es -version.

Los args opcionales se construyen en una lista y se almacenan en la variable llamada argv y. argc se inicializa a la longitud de argv.

Argv0 se define como el nombre del script o binario si no se utiliza ningún script. Por ejemplo, a continuación se imprime el nombre del guión y los tres primeros argumentos:

send_user «$argv0[lrange $argv 0 2]»

Comandos

Expect utiliza el lenguaje de comandos de la herramienta. Tcl proporciona flujo de control (si, para, romper), evaluación de expresiones y varias otras características tales como recursión y definición de procedimientos. Los comandos usados aquí pero no definidos (set, if, exec) son comandos Tcl. Expect soporta comandos adicionales. A menos que se especifique lo contrario, los comandos devuelven la cadena vacía.

Los comandos están ordenados alfabéticamente para que se puedan localizar rápidamente. Sin embargo, los nuevos usuarios pueden encontrar más fácil comenzar leyendo las descripciones de spawn, enviar, esperar e interactuar, en ese orden.

close[-slave][-onexec 0|1][-i spawn_id]

cierra la conexión con el proceso actual. La mayoría de los programas interactivos detectarán EOF en su entrada estándar y salida; por lo tanto cerrar usualmente es suficiente para matar el proceso también. La bandera -i declara el proceso de cierre correspondiente al nombre spawn_id.

Tanto esperar como interactuar detectará cuando el proceso actual salga e implícitamente hacer un cierre, pero si matas el proceso por, digamos, «exec kill $pid», necesitas explícitamente llamar a cerrar .

La bandera -onexec determina si la identificación del desove se cierra en cualquier nuevo proceso de desove o si el proceso se superpone. Para dejar un id de spawn abierto, utilice el valor 0. Un valor entero distinto de cero fuerza al desove a cerrarse en cualquier proceso nuevo.

La bandera -slave cierra el esclavo asociado con el id de spawn. Cuando la conexión está cerrada, el esclavo también se cierra automáticamente si sigue abierto.

No importa si la conexión está cerrada implícita o explícitamente, debe llamar a wait para limpiar la ranura de proceso del núcleo correspondiente. El comando de cierre no llama en espera ya que no hay garantía de que el cierre de una conexión de proceso provoque su salida.

debug [[-now] 0|1]

controla un depurador Tcl que le permite desplazarse por las sentencias y establecer puntos de interrupción.

Sin argumentos, se devuelve un 1 si el depurador no se está ejecutando, de lo contrario se devuelve un 0.

Con un argumento 1, se inicia el depurador. Con un argumento 0, el depurador se detiene. Si un argumento 1 es precedido por la bandera -now, el depurador se inicia inmediatamente. De lo contrario, el depurador se inicia con la siguiente sentencia Tcl.

El comando debug no cambia ningún traps. Compare esto con el inicio Espere con la bandera -D.

El comando de desconexión desconecta un proceso bifurcado del terminal. Continúa ejecutándose en segundo plano. El proceso recibe su propio grupo de procesos. Las E/S estándar se redirigen a /dev/null.

El siguiente fragmento utiliza disconnect para continuar ejecutando el script en segundo plano.

if {[fork]!=0} exitdisconnect. …

El siguiente script lee una contraseña y luego ejecuta un programa cada hora que demanda una contraseña cada vez que se ejecuta. El script proporciona la contraseña para que sólo tenga que escribirla una vez.

send_user «password? «expect_user -re «(.*)»para {} 1 {} {si {[tenedor]!=0} {sleep 3600;continue}disconnectspawn priv_progexpect Contraseña:send «$expect_out(1,string)r». ..exit}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Una ventaja de usar desconexión sobre la característica de proceso asíncrono (&) es que Expect puede guardar los parámetros de los terminales antes de la desconexión y luego aplicarlos a nuevos ptys. Con &, Expect no tiene la posibilidad de leer los parámetros del terminal, ya que el terminal ya está desconectado en el momento en que Expect recibe el control.

exit[-opts][status]

>Salir[-opts][estado

Espere salir o prepárese para hacerlo de otra manera.

La bandera -onexit hace que el siguiente argumento se utilice como manejador de salida. Sin un argumento, se devuelve el manejador de salida actual.

La bandera -noexit hace que espere que se prepare para salir, pero se detenga antes de devolver el control al sistema operativo. Se ejecuta el exit handler definido por el usuario así como los handlers internos de Expect. No se deben ejecutar más comandos Espere que se ejecuten. Esto es útil si está ejecutando Esperar con otras extensiones Tcl. El intérprete actual (y la ventana principal si está en el entorno Tk) permanecen para que otras extensiones Tcl puedan limpiarse. Si la salida de Expect es llamada de nuevo (sin embargo esto puede ocurrir), los handlers no se ejecutan de nuevo.

Al salir, todas las conexiones a los procesos desovados se cierran. El cierre será detectado como un EOF por procesos de desove. exit no realiza ninguna otra acción más allá de lo que hace el procedimiento normal _exit(2). Por lo tanto, los procesos desovados que no verifican el EOF pueden continuar funcionando. (Una variedad de condiciones son importantes para determinar, por ejemplo, qué señales se enviarán a un proceso desovado, pero éstas son dependientes del sistema, normalmente documentadas en la salida(3)). Los procesos desovados que continúan funcionando serán heredados por init.

status (o 0 si no se especifica) se devuelve como el status de salida de Esperar . exit se ejecuta implícitamente si se alcanza el final del script.

exp_continue[-continue_timer]

El comando exp_continue permite esperar que el mismo siga ejecutándose en lugar de volver a ejecutarse como lo haría normalmente. Por defecto exp_continue reinicia el temporizador de tiempo de espera. El indicador -continue_timer impide que el temporizador se reinicie. (Ver expect para más información.)

exp_internal[-f file] value

hace que otros comandos envíen información de diagnóstico interna a Esperar a stderr si el valor no es cero. Esta salida se desactiva si el valor es 0. La información de diagnóstico incluye todos los caracteres recibidos y todos los intentos realizados para comparar la salida actual con los patrones.

Si se suministra el archivo opcional file, toda la salida normal y de depuración se escribe en ese archivo (independientemente del valor del valor value). Se cierra cualquier archivo de salida de diagnóstico anterior.

El indicador -info hace que exp_internal devuelva una descripción de los argumentos no informativos más recientes.

exp_open[args][-i spawn_id]

devuelve un identificador de archivo Tcl que corresponde a la identificación original de spawn. El identificador de archivo puede ser usado como si estuviera abierto por el comando open de Tcl . (La identificación del desove ya no debe ser usada. A wait no debería ejecutarse.

La bandera -leaveopen deja abierto el identificador de desove para el acceso a través de los comandos Expect. A wait debe ser ejecutado en el id de spawn.

exp_pid[-i spawn_id]

devuelve el id del proceso correspondiente al proceso actualmente generado. Si se usa la bandera -i , el pid devuelto corresponde al del id de desove dado.

exp_send

es un

TAMBIÉN TE INTERESA

redactor de contenido

¿Corre peligro un redactor de contenido con la inteligencia artificial?

Un redactor de contenido es un tipo de profesional que ha existido siempre. Desde la llegada de los medios de comunicación clásicos hasta la consolidación de las plataformas digitales de ocio e información con la llegada de streamers, el puesto también llamado de content editor ha sido relevante se mire por donde se mire. Esa

Amazon Warehouse

¿Buscas oportunidades? Déjate caer por Amazon Warehouse…

Si no conoces Amazon Warehouse es porque nunca has buscado bien en las entrañas de este gigante del comercio electrónico. En este departamento del marketpalce encontraremos chollos, gangas y productos rebajadas al ser reacondicionados o de segunda mano. A lo largo de estas líneas te mostraremos todos los secretos de este rincón de Amazon que

lo-nuevo-de-HP-en-el-CES-2023

Lo más destacado de HP en el CES 2023

Como si fuera una presentación de temporada de una serie de televisión, HP ha aprovechado su momento en el CES 2023, la feria más importante a nivel tecnológico en el mundo, para anunciar todo lo que se viene en este nuevo año para la compañía. Y lo hace poniendo el foco en la vida híbrida

tendencias-de-tecnología

… Más tendencias de tecnología para el nuevo año

Si bien es cierto que un post anterior hablábamos de tendencias de tecnología para 2023, lo cierto es que la información que se maneja es amplia como para detenerse solamente en cinco tendencias. A lo largo de este nuevo artículo seguiremos hablando de nuevas tecnologías que llegarán en el 2023 o bien se consolidarán. Los