Expect es un programa que habla con otros programas interactivos de acuerdo con un script. Siguiendo el guión, Expect sabe qué se puede esperar de un programa y cuál debería ser la respuesta correcta. Un lenguaje interpretado proporciona ramificaciones y estructuras de control de alto nivel para dirigir el diálogo. Además, el usuario puede tomar el control e interactuar directamente cuando lo desee, y luego devolver el control al script.
Expectk es una mezcla de Expect y Tk. Se comporta como Expect y el deseo de Tk. Expect también puede usarse 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 se generaliza para que pueda ejecutarse como un comando de nivel de usuario con cualquier programa y tarea en mente. Esperar puede hablar con varios programas al mismo tiempo.
Lo que puedes esperar puede hacer
Por ejemplo, aquí hay algunas cosas que puede hacer el comando expect:
- Haga que su computadora le devuelva la llamada para que pueda iniciar sesión sin pagar la llamada.
- Comience un juego y si no aparece la configuración óptima, reinícielo una y otra vez hasta que lo haga, y luego entregue el control a usted.
- Ejecute fsck y, en respuesta a sus preguntas, responda "sí" o "no" o devuélvale el control, según los criterios predeterminados.
- Conéctese a otra red y recupere automáticamente su correo para que parezca que fue enviado originalmente a su sistema local.
- Lleve 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. Todos son posibles 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 se pueda caracterizar programáticamente. Expect también puede devolver el control al usuario sin detener el programa que se está controlando. Del mismo modo, el usuario puede devolver el control al script en cualquier momento.
Uso
Espera leer cmdfile para una lista de comandos para ejecutar. Expect puede invocarse implícitamente en sistemas que admiten el #! 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 solo un ejemplo.
El indicador -c precede a un comando que se ejecutará antes que cualquier otro en el script. El comando debe citarse para evitar que sea dividido por el shell. Esta opción se puede utilizar varias veces. Se pueden ejecutar varios comandos con una sola -c separándolos con punto y coma. Los comandos se ejecutan en el orden en que aparecen. Cuando se usa Expectk, esta opción se especifica como -comando.
El indicador -d habilita algunos resultados de diagnóstico, que principalmente informan la actividad interna de los comandos, como esperar e interactuar. Este indicador tiene el mismo efecto que "exp_internal 1" al comienzo de un script Expect, más la versión de Expect está impresa.
La bandera -D habilita un depurador interactivo. Un valor entero debe seguir. El depurador tomará el control antes del siguiente procedimiento Tcl si el valor no es cero o si se presiona ^ C o si se llega a un punto de interrupción, o aparece en el script otro comando apropiado del depurador. Cuando se usa Expectk, esta opción se especifica como -Depurar.
El indicador -f precede a un archivo desde el cual leer comandos. La bandera en sí es opcional, ya que solo es útil cuando se utiliza el #! Notación, para que otros argumentos puedan ser suministrados en la línea de comando. Cuando se usa Expectk, esta opción se especifica como -file.
Por defecto, el archivo de comandos se lee en la memoria y se ejecuta en su totalidad. Ocasionalmente es conveniente leer archivos una línea a la vez. Para forzar que los archivos arbitrarios se manejen de esta manera, use la marca -b. Cuando se usa Expectk, esta opción se especifica como -buffer.
Si la cadena "-" se suministra como un nombre de archivo, en su lugar se lee la entrada estándar. Utilice "./-" para leer un archivo llamado "-".
La marca -i hace que Espere pedir comandos de forma interactiva en lugar de leerlos desde un archivo. Las solicitudes se terminan a través del comando de salida o en EOF. El indicador -i se asume si no se utiliza ni un archivo de comando ni -c. Cuando se usa Expectk, esta opción se especifica como -interactiva.
- Puede ser usado 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 útilmente colocado en el #! Línea para evitar cualquier interpretación flaglike por esperar. Por ejemplo, lo siguiente dejará los argumentos originales, incluido el nombre del script en la variable argv .
#! / usr / local / bin / expect -
Tenga en cuenta que las convenciones habituales de getopt (3) y execve (2) se deben observar al agregar argumentos al #! línea.
El archivo $ exp_library / expect.rc se obtiene automáticamente si está presente, a menos que se use la marca -N. (Cuando se usa 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 use la marca -n. Si se define la variable de entorno DOTDIR, se trata como un directorio y se lee .expect.rc desde allí. Cuando se usa Expectk, esta opción se especifica como -norc.Este aprovisionamiento ocurre solo después de ejecutar cualquier marca -c.
-v hace que Espere imprimir su número de versión y salir. La bandera correspondiente en Expectk, que usa nombres de bandera largos, es -version.
Los argumentos 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 usa ningún script. Por ejemplo, lo siguiente imprime el nombre del script y los tres primeros argumentos:
send_user "$ argv0 lrange $ argv 0 2 n"
Comandos
Expect utiliza Tool Command Language. Tcl proporciona flujo de control (si, para, interrupción), evaluación de expresiones y varias otras características, como la definición de recursión y procedimiento. Los comandos utilizados aquí pero no definidos (set, if, exec) son comandos Tcl. Esperar soporta comandos adicionales. A menos que se especifique lo contrario, los comandos devuelven la cadena vacía.
Los comandos están listados alfabéticamente para que puedan ser localizados rápidamente. Sin embargo, a los nuevos usuarios les puede resultar más fácil comenzar por leer las descripciones de generar, enviar, esperar e interactuar, en ese orden.
cerrar -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 stdin y salir; así cerrar Por lo general, también es suficiente para matar el proceso. La bandera -i declara el proceso de cierre correspondiente al spawn_id nombrado.
Tanto la expectativa como la interacción detectarán cuando el proceso actual finalice e implícitamente cerrará, pero si finaliza el proceso, por ejemplo, "exec kill $ pid", debe llamar explícitamente a close.
El indicador -onexec determina si el ID de generación se cierra en cualquier nuevo proceso generado o si el proceso se superpone. Para dejar abierta una ID de generación, use el valor 0. Un valor entero distinto de cero obliga a que la generación se cierre en cualquier proceso nuevo.
La bandera -slave cierra el esclavo asociado con el id de spawn. Cuando se cierra la conexión, el esclavo también se cierra automáticamente si todavía está abierto.
No importa si la conexión está cerrada implícita o explícitamente, debe llamar a esperar para borrar la ranura correspondiente del proceso del kernel. El comando de cierre no llama a la espera ya que no hay garantía de que cerrar una conexión de proceso provoque que se cierre.
depurar -now 0 | 1
controla un depurador Tcl que le permite recorrer las declaraciones 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 está precedido por el indicador -now, el depurador se inicia inmediatamente. De lo contrario, el depurador se inicia con la siguiente instrucción Tcl.
El comando debug no cambia ninguna trampa. Compare esto con el inicio Espere con la marca -D.
El comando de desconexión desconecta un proceso bifurcado del terminal. Se sigue ejecutando en segundo plano. El proceso tiene su propio grupo de procesos. La E / S estándar se redirige a / dev / null.
El siguiente fragmento utiliza desconectar para continuar ejecutando el script en segundo plano.
si {fork! = 0} salga de desconectar. . .
La siguiente secuencia de comandos lee una contraseña y luego ejecuta un programa cada hora que exige una contraseña cada vez que se ejecuta. La secuencia de comandos proporciona la contraseña para que solo tenga que escribirla una vez.
send_user "password? " expect_user -re "(. *) n" para {} 1 {} {if {fork! = 0} {sleep 3600; continue} desconectar engendrar priv_prog expect Contraseña: enviar "$ expect_out ( 1, cadena) r ". . . salida }
Una ventaja de usar desconexión sobre la función de proceso asíncrono de shell (&) es que Expect puede guardar los parámetros del terminal antes de la desconexión y luego aplicarlos a las nuevas ptys. Con &, Expect no tiene la oportunidad de leer los parámetros del terminal ya que el terminal ya está desconectado en el momento en que Expect recibe el control.
salir -opts estado
Causas Espera salir o prepararte para hacerlo.
los -inserte flag hace que el siguiente argumento se use como un controlador de salida. Sin un argumento, se devuelve el controlador de salida actual.
los -Sin salida causas de la bandera Esperar para prepararse para salir pero sin llegar a devolver el control al sistema operativo. El controlador de salida definido por el usuario se ejecuta al igual que los controladores internos de Expect. No se deben ejecutar más comandos Expect. Esto es útil si está ejecutando Expect con otras extensiones Tcl. El intérprete actual (y la ventana principal si está en el entorno Tk) permanece para que otras extensiones Tcl puedan limpiarse. Si es de esperar salida se llama de nuevo (sin embargo, esto puede ocurrir), los controladores no se vuelven a ejecutar.
Al salir, todas las conexiones a los procesos generados se cierran. El cierre se detectará como un EOF por los procesos generados. salida no realiza otras acciones más allá de lo que hace el procedimiento _exit (2) normal. Por lo tanto, los procesos generados que no verifican el EOF pueden continuar ejecutándose. (Una variedad de condiciones son importantes para determinar, por ejemplo, qué señales se enviarán a un proceso generado, pero son dependientes del sistema, típicamente documentadas en la salida (3)). Los procesos generados que continúan ejecutándose serán heredados por init
estado (o 0 si no se especifica) se devuelve como el estado de salida de Esperar . salida se ejecuta implícitamente si se llega al final del script.
exp_continue -continue_timer
El comando exp_continuar permite esperar Se sigue ejecutando en lugar de volver como lo haría normalmente. Por defecto exp_continuar restablece el temporizador de tiempo de espera. los -continue_timer La bandera evita que el temporizador se reinicie. (Ver esperar para más información.)
exp_internal -f archivo valor
hace que otros comandos envíen información de diagnóstico interna a Esperar a stderr si valor no es cero. Esta salida está deshabilitada si valor es 0. La información de diagnóstico incluye todos los caracteres recibidos y cada intento realizado para hacer coincidir la salida actual con los patrones.
Si el opcional expediente se suministra, toda la salida normal y de depuración se escribe en ese archivo (independientemente del valor de valor ). Cualquier archivo de salida de diagnóstico anterior está cerrado.
los -info flag hace que exp_internal devuelva una descripción de los argumentos de información no más recientes que se dieron.
exp_open args -i spawn_id
devuelve un identificador de archivo Tcl que corresponde al ID de generación original. El identificador de archivo se puede usar como si fuera abierto por Tcl abierto mando. (La identificación de spawn ya no debe ser usada. A Espere No debe ser ejecutado.
los -dejar abierto la bandera deja abierta la identificación del spawn para acceder a través de los comandos Esperar. UNA Espere debe ser ejecutado en el id de engendro.
exp_pid -i spawn_id
devuelve el ID de proceso correspondiente al proceso generado actualmente. Si el -yo se usa la bandera, el pid devuelto corresponde al de la id de spawn dada.
exp_send
es un alias para enviar .
exp_send_error
es un alias para enviar error .
exp_send_log
es un alias para send_log .
exp_send_tty
es un alias para send_tty .
exp_send_user
es un alias para enviar_usuario .
exp_version -exit version
es útil para asegurar que la secuencia de comandos sea compatible con la versión actual de Expect.
Sin argumentos, la versión actual de Esperar es regresado. Esta versión puede ser codificada en su script. Si realmente sabe que no está utilizando las características de las versiones recientes, puede especificar una versión anterior.
Las versiones constan de tres números separados por puntos. Primero es el número mayor. Scripts escritos para versiones de Esperar con un número mayor diferente casi seguramente no funcionará. exp_version devuelve un error si los números principales no coinciden.
El segundo es el número menor. Los scripts escritos para una versión con un número menor mayor que la versión actual pueden depender de alguna característica nueva y es posible que no se ejecuten. exp_version devuelve un error si los números principales coinciden, pero el número menor de la secuencia de comandos es mayor que el de la ejecución Esperar .
Tercero es un número que no juega ningún papel en la comparación de versiones. Sin embargo, se incrementa cuando el Esperar La distribución del software se modifica de cualquier manera, por ejemplo, mediante documentación adicional u optimización. Se restablece a 0 en cada nueva versión secundaria.
Con el -salida bandera, Esperar imprime un error y sale si la versión no está actualizada.
expect -opts pat1 body1 … -opts patn bodyn
espera hasta que uno de los patrones coincida con la salida de un proceso generado, haya pasado un período de tiempo específico o se vea un final de archivo. Si el cuerpo final está vacío, se puede omitir.
Patrones de los más recientes. esperar antes de El comando se usa implícitamente antes que cualquier otro patrón. Patrones de los más recientes. esperar_after El comando se usa implícitamente después de cualquier otro patrón.
Si los argumentos a la totalidad esperar La declaración requiere más de una línea, todos los argumentos se pueden "unir" en uno para evitar terminar cada línea con una barra invertida. En este caso, las sustituciones habituales de Tcl se producirán a pesar de las llaves.
Si un patrón es la palabra clave eof , el cuerpo correspondiente se ejecuta al final del archivo. Si un patrón es la palabra clave se acabó el tiempo , el cuerpo correspondiente se ejecuta en el tiempo de espera. Si no se utiliza ninguna palabra clave de tiempo de espera, se ejecuta una acción nula implícita en el tiempo de espera. El período de tiempo de espera predeterminado es de 10 segundos, pero se puede configurar, por ejemplo, en 30, con el comando "establecer tiempo de espera 30". Un tiempo de espera infinito puede ser designado por el valor -1. Si un patrón es la palabra clave defecto , el cuerpo correspondiente se ejecuta en el tiempo de espera o el final del archivo.
Si un patrón coincide, entonces se ejecuta el cuerpo correspondiente. esperar devuelve el resultado del cuerpo (o la cadena vacía si no coincide el patrón). En el caso de que coincidan varios patrones, el que aparece primero se utiliza para seleccionar un cuerpo.
Cada vez que llega una nueva salida, se compara con cada patrón en el orden en que aparecen. Por lo tanto, puede probar la ausencia de una coincidencia al hacer que el último patrón aparezca algo que se garantice, como un aviso. En situaciones donde no hay aviso, debe usar se acabó el tiempo (como lo harías si estuvieras interactuando manualmente).
Los patrones se especifican de tres maneras. Por defecto, los patrones se especifican como con Tcl coincidencia de cuerdas mando. (Dichos patrones también son similares a las expresiones regulares de shell C, generalmente denominadas patrones "glob"). los -gl la bandera se puede usar para proteger patrones que de otro modo podrían coincidir esperar banderas de hacerlo. Cualquier patrón que comience con un "-" debe protegerse de esta manera. (Todas las cadenas que comienzan con "-" están reservadas para futuras opciones).
Por ejemplo, el siguiente fragmento busca un inicio de sesión exitoso. (Tenga en cuenta que abortar se presume que es un procedimiento definido en otra parte del script.)
espera {ocupado {pone ocupado n; exp_continue} error abortar "contraseña inválida" abort timeout abort connected}
Las cotizaciones son necesarias en el cuarto patrón ya que contiene un espacio, que de otra manera separaría el patrón de la acción.Los patrones con la misma acción (como la 3ª y la 4ª) requieren volver a listar las acciones. Esto se puede evitar utilizando patrones de estilo de expresión regular (ver más abajo). Puede encontrar más información sobre la formación de patrones de estilo glob en el manual de Tcl.
Los patrones de estilo Regexp siguen la sintaxis definida por Tcl expresión regular (abreviatura de "expresión regular") comando. Los patrones de expresión regular se introducen con la bandera. -re . El ejemplo anterior se puede reescribir usando una expresión regular como:
espera {ocupado {pone ocupado n; exp_continue} -re "error | contraseña inválida" abort timeout abort connected}
Ambos tipos de patrones están "sin anclar". Esto significa que los patrones no tienen que coincidir con toda la cadena, sino que pueden comenzar y finalizar la coincidencia en cualquier parte de la cadena (siempre que todo lo demás coincida). Use ^ para hacer coincidir el comienzo de una cadena, y $ para hacer coincidir el final. Tenga en cuenta que si no espera el final de una cadena, sus respuestas pueden terminar fácilmente en el medio de la cadena, ya que se hacen eco del proceso generado. Mientras se siguen produciendo resultados correctos, la salida puede parecer poco natural. Por lo tanto, se recomienda el uso de $ si puede describir exactamente los caracteres al final de una cadena.
Tenga en cuenta que en muchos editores, ^ y $ coinciden con el principio y el final de las líneas respectivamente. Sin embargo, debido a que la expectativa no está orientada a la línea, estos caracteres coinciden con el principio y el final de los datos (a diferencia de las líneas) actualmente en el búfer de coincidencia esperada. (Además, vea la nota a continuación en "indigestión del sistema").
los -ex flag hace que el patrón coincida con una cadena "exacta". No se realiza ninguna interpretación de *, ^, etc. (aunque aún se deben respetar las convenciones habituales de Tcl). Los patrones exactos están siempre sin anclar.
los -no hay caso la bandera hace que los caracteres en mayúscula de la salida se comparen como si fueran caracteres en minúscula. El patrón no se ve afectado.
Al leer la salida, más de 2000 bytes pueden obligar a los bytes anteriores a ser "olvidados". Esto se puede cambiar con la función. match_max . (Tenga en cuenta que los valores excesivamente grandes pueden ralentizar el emparejador de patrones). Si patlist es full_buffer , el cuerpo correspondiente se ejecuta si match_max Se han recibido bytes y ningún otro patrón ha coincidido. Sea o no el full_buffer Se usa la palabra clave, los caracteres olvidados se escriben en expect_out (búfer).
Si patlist es la palabra clave nulo , y se permiten nulos (a través de la remove_nulls comando), el cuerpo correspondiente se ejecuta si un solo ASCII 0 coincide. No es posible hacer coincidir 0 bytes a través de patrones glob o regexp.
Al coincidir con un patrón (o eof o full_buffer), cualquier resultado coincidente y no coincidente se guarda en la variable expect_out (buffer) . En las variables se guardan hasta 9 coincidencias de subscripción de expresiones regulares expect_out (1, string) mediante expect_out (9, string) . Si el -índices La bandera se usa antes de un patrón, los índices de inicio y finalización (en una forma adecuada para lrange ) de las 10 cadenas se almacenan en las variables expect_out (X, inicio) y expect_out (X, final) donde X es un dígito, corresponde a la posición de subcadena en el búfer. 0 se refiere a las cadenas que coinciden con el patrón completo y se generan para los patrones globales, así como los patrones de expresión regular. Por ejemplo, si un proceso ha producido un resultado de "abcdefgh n", el resultado de:
espera "cd"
Es como si se hubieran ejecutado las siguientes afirmaciones:
establecer expect_out (0, string) cd establecer expect_out (buffer) abcd
y "efgh n" se deja en el búfer de salida. Si un proceso produce la salida "abbbcabkkkka n", el resultado de:
expect -indices -re "b (b *). * (k +)"
Es como si se hubieran ejecutado las siguientes afirmaciones:
establecer expect_out (0, inicio) 1 establecer expect_out (0, finalizar) 10 establecer expect_out (0, cadena) bbbcabkkkk establecer expect_out (1, inicio) 2 configurar expect_out (1, final) 3 establecer expect_out (1, cadena) bb establecer expect_out (2, inicio) 10 establece expect_out (2, final) 10 establece expect_out (2, cadena) k establece expect_out (búfer) abbbcabkkkk
y "a n" se deja en el búfer de salida. El patrón "*" (y -re ". *") Vaciará el búfer de salida sin leer más resultados del proceso.
Normalmente, la salida coincidente se descarta de los búferes internos de Expect. Esto se puede prevenir prefijando un patrón con el -transferir bandera. Esta bandera es especialmente útil en la experimentación (y se puede abreviar como "-no" para mayor comodidad mientras se experimenta).
El ID de generación asociado con la salida coincidente (o eof o full_buffer) se almacena en expect_out (spawn_id) .
los -se acabó el tiempo flag hace que el comando expect actual use el siguiente valor como tiempo de espera en lugar de usar el valor de la variable timeout.
De forma predeterminada, los patrones se comparan con la salida del proceso actual, sin embargo, -yo La bandera declara que la salida de la lista de spawn_id nombrada se comparará con los siguientes patrones (hasta el siguiente -yo ). La lista de spawn_id debe ser una lista de spawn_ids separada por espacios en blanco o una variable que se refiera a dicha lista de spawn_ids.
Por ejemplo, el siguiente ejemplo espera "conectado" del proceso actual, o "ocupado", "fallado" o "contraseña inválida" del spawn_id nombrado por $ proc2.
espere {-i $ proc2 ocupado {pone ocupado n; exp_continue} -re "error | contraseña inválida" abort timeout abort connected}
El valor de la variable global. any_spawn_id puede usarse para hacer coincidir patrones con cualquier spawn_ids que se nombra con todos los demás -yo banderas en la corriente esperar mando. El spawn_id de un -yo bandera sin patrón asociado (es decir, seguida inmediatamente por otra -yo ) está disponible para cualquier otro patrón en el mismo esperar comando asociado con any_spawn_id.
los -yo La bandera también puede nombrar una variable global en cuyo caso la variable se lee para obtener una lista de ID de generación. La variable se vuelve a leer cada vez que cambia. Esto proporciona una forma de cambiar la fuente de E / S mientras el comando está en ejecución. Los ID de generación que se proporcionan de esta manera se denominan ID de generación "indirectos".
Acciones como descanso y continuar causar estructuras de control (es decir, para , proc ) comportarse de la manera habitual. El comando exp_continuar permite esperar Se sigue ejecutando en lugar de volver como lo haría normalmente.
Esto es útil para evitar bucles explícitos o declaraciones repetidas de expectativa. El siguiente ejemplo es parte de un fragmento para automatizar rlogin. los exp_continuar evita tener que escribir un segundo esperar sentencia (para volver a buscar el aviso) si rlogin solicita una contraseña.
expect {Contraseña: {stty -echo send_user "contraseña (para $ user) en $ host:" expect_user -re "(. *) n" send_user " n" enviar "$ expect_out (1, string) r" stty echo exp_continue} incorrecto {send_user "contraseña o cuenta inválida n" exit} timeout {send_user "conexión a $ host time out out n" exit} eof {send_user "conexión al host falló: $ expect_out (buffer)" exit} - re $ prompt}
Por ejemplo, el siguiente fragmento podría ayudar a un usuario a guiar una interacción que ya está totalmente automatizada. En este caso, el terminal se pone en modo crudo. Si el usuario presiona "+", se incrementa una variable. Si se presiona "p", se envían varias devoluciones al proceso, tal vez para empujarlo de alguna manera, y "i" permite al usuario interactuar con el proceso, robando efectivamente el control del script. En cada caso, el exp_continuar permite la corriente esperar para continuar con la coincidencia de patrones después de ejecutar la acción actual.
stty raw -echo expect_after {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {interactuar; exp_continue} "quit" exit}
Por defecto, exp_continuar restablece el temporizador de tiempo de espera. El temporizador no se reinicia, si exp_continuar se llama con el -continue_timer bandera.
expect_after expect_args
funciona de manera idéntica a la esperar antes de excepto que si los patrones de ambos esperar y esperar_after puede coincidir, el esperar Se utiliza el patrón. Ver el esperar antes de comando para más información.
expect_background expect_args
toma los mismos argumentos queesperar Sin embargo, vuelve inmediatamente. Los patrones se prueban cada vez que llegan nuevas entradas. El patrónse acabó el tiempo ydefecto no tienen sentido paraexpect_background y se descartan silenciosamente. De lo contrario, elexpect_background usos de comandoesperar antes de yesperar_after patrones comoesperar hace.
Cuandoexpect_background se están evaluando las acciones, se bloquea el procesamiento en segundo plano para el mismo ID de generación. El procesamiento en segundo plano se desbloquea cuando se completa la acción. Mientras el procesamiento en segundo plano está bloqueado, es posible hacer un (primer plano)esperar en la misma id.
No es posible ejecutar unesperar mientras que unexpect_background esta desbloqueadoexpect_background para un ID de spawn particular se elimina al declarar un nuevo expect_background con el mismo ID de spawn. Declarandoexpect_background sin patrón elimina el ID de generación dado de la capacidad de hacer coincidir patrones en el fondo.
expect_before expect_args
toma los mismos argumentos queesperar Sin embargo, vuelve inmediatamente. Parejas patrón-acción de las más recientes.esperar antes de con el mismo ID de engendro se agregan implícitamente a cualquier siguienteesperar comandos Si un patrón coincide, se trata como si hubiera sido especificado en elesperar comando en sí, y el cuerpo asociado se ejecuta en el contexto de laesperar mando. Si los patrones de ambosesperar antes de yesperar puede coincidir, elesperar antes de Se utiliza el patrón.
Si no se especifica ningún patrón, el ID de generación no se verifica para ningún patrón.
A menos que sea invalidado por un-yo bandera,esperar antes de los patrones coinciden con la identificación de spawn definida en el momento en que laesperar antes de El comando fue ejecutado (no cuando su patrón coincide).
Las causas de la bandera -infoesperar antes de para devolver las especificaciones actuales de los patrones que coincidirá. Por defecto, informa sobre el id de spawn actual. Se puede dar una especificación de ID de spawn opcional para obtener información sobre ese ID de spawn. Por ejemplo
expect_before -info -i $ proc
Como máximo, se puede dar una especificación de ID de engendro. La marca -indirect suprime los identificadores de generación directos que provienen solo de especificaciones indirectas.
En lugar de una especificación de ID de spawn, el indicador "-all" hará que "-info" informe sobre todos los ID de spawn.
La salida del indicador -info se puede reutilizar como el argumento a expect_before.
expect_tty expect_args
es comoesperar pero lee caracteres de / dev / tty (es decir, pulsaciones de teclas del usuario). Por defecto, la lectura se realiza en modo cocido. Por lo tanto, las líneas deben terminar con una devolución para queesperar para verlos. Esto puede ser cambiado víastty (ver elstty comando abajo).
expect_user expect_args
es comoesperar pero lee caracteres de stdin (es decir, pulsaciones de teclas del usuario). Por defecto, la lectura se realiza en modo cocido. Por lo tanto, las líneas deben terminar con una devolución para queesperar para verlos.Esto puede ser cambiado víastty (ver elstty comando abajo).
tenedor
Crea un nuevo proceso. El nuevo proceso es una copia exacta de la actual.Esperar proceso. En el éxito,tenedor devuelve 0 al nuevo proceso (secundario) y devuelve la ID del proceso secundario al proceso principal. En caso de fallo (invariablemente debido a la falta de recursos, por ejemplo, espacio de intercambio, memoria),tenedor devuelve -1 al proceso principal, y no se crea ningún proceso secundario.
Procesos bifurcados salen a través de lasalida comando, al igual que el proceso original. Los procesos bifurcados pueden escribir en los archivos de registro. Si no desactiva la depuración o el registro en la mayoría de los procesos, el resultado puede ser confuso.
Algunas implementaciones de pty pueden ser confundidas por varios lectores y escritores, incluso momentáneamente. Por lo tanto, es más segurotenedor Antes de los procesos de desove.
interactuar string1 body1 … stringn bodyn
le da al usuario el control del proceso actual, de modo que las pulsaciones de tecla se envíen al proceso actual, y se devuelven el stdout y el stderr del proceso actual.
Los pares de cadena-cuerpo pueden especificarse como argumentos, en cuyo caso el cuerpo se ejecuta cuando se ingresa la cadena correspondiente. (De forma predeterminada, la cadena no se envía al proceso actual).Interprete Se asume el comando, si falta el cuerpo final.
Si los argumentos a la totalidadinteractuar La declaración requiere más de una línea, todos los argumentos se pueden "unir" en uno para evitar terminar cada línea con una barra invertida. En este caso, las sustituciones habituales de Tcl se producirán a pesar de las llaves.
Por ejemplo, las siguientes ejecuciones de comandos interactúan con los siguientes pares de cadena-cuerpo definidos: Cuando se presiona ^ Z,Esperar está suspendido. (Los-Reiniciar la bandera restaura los modos de terminal.) Cuando se presiona ^ A, el usuario ve "usted escribió un control-A" y el proceso se envía a ^ A. Cuando se presiona $, el usuario ve la fecha. Cuando se presiona ^ C,Esperar salidas Si se ingresa "foo", el usuario ve "barra". Cuando se presiona ~~, elEsperar el intérprete corre interactivamente
establezca CTRLZ 032 interactuar {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "usted escribió un control-A n"; send " 001"} $ {send_user "La fecha es formato de reloj reloj segundos."} 003 exit foo {send_user "bar"} ~~}
En los pares de cuerdas, las cadenas se comparan en el orden en que se enumeran como argumentos. Las cadenas que coinciden parcialmente no se envían al proceso actual antes de que llegue el resto. Si los caracteres se ingresan de tal manera que ya no puede haber una coincidencia, solo se enviará al proceso la parte de la cadena que posiblemente no pueda comenzar otra coincidencia. Por lo tanto, las cadenas que son subcadenas de coincidencias parciales pueden coincidir más adelante, si las cadenas originales que intentaban coincidir finalmente fallan.
De forma predeterminada, la coincidencia de cadenas es exacta sin comodines. (En contraste, laesperar comando usa patrones de estilo glob por defecto.)-ex la bandera puede usarse para proteger patrones que de otra manera podrían coincidirinteractuar banderas de hacerlo. Cualquier patrón que comience con un "-" debe protegerse de esta manera. (Todas las cadenas que comienzan con "-" están reservadas para futuras opciones).
los-re flag obliga a la cadena a interpretarse como un patrón de estilo de expresión regular. En este caso, las subcadenas coincidentes se almacenan en la variable. interact_out similar a la maneraesperar Almacena su salida en la variable.expect_out . los-índices bandera es igualmente compatible.
El patróneof introduce una acción que se ejecuta al final del archivo. Una separacioneof patrón también puede seguir el-salida indicador en cuyo caso se hace coincidir si se detecta un eof al escribir la salida. El valor por defectoeof La acción es "retorno", por lo queinteractuar simplemente vuelve sobre cualquier EOF.
El patrónse acabó el tiempo introduce un tiempo de espera (en segundos) y una acción que se ejecuta después de que no se hayan leído caracteres durante un tiempo determinado. losse acabó el tiempo patrón se aplica al proceso especificado más recientemente. No hay tiempo de espera predeterminado. La variable especial "timeout" (utilizada por elesperar comando) no tiene efecto en este tiempo de espera.
Por ejemplo, la siguiente declaración podría usarse para los usuarios que no hayan escrito nada durante una hora pero que todavía reciban mensajes frecuentes del sistema:
interact -input $ user_spawn_id timeout 3600 return -output $ spawn_id
Si el patrón es la palabra clavenulo , y se permiten nulos (a través de laremove_nulls comando), el cuerpo correspondiente se ejecuta si un solo ASCII 0 coincide. No es posible hacer coincidir 0 bytes a través de patrones glob o regexp.
Prefacio de un patrón con la bandera.-yo escribo causa la variable interact_out (spawn_id) para configurarse en el spawn_id que coincide con el patrón (o eof).
Acciones comodescanso ycontinuar causar estructuras de control (es decir,para , proc ) comportarse de la manera habitual. sin embargoregreso hace interactuar para volver a su interlocutor, mientras queinter_return causasinteractuar Para provocar una devolución en su llamante. Por ejemplo, si se llama "proc"interactuar que luego ejecutó la accióninter_return , proc foo volvería. (Esto significa que siinteractuar llamadasInterprete escribiendo interactivamenteregreso hará que la interacción continúe, mientras queinter_return hará que la interacción regrese a su interlocutor.)
Duranteinteractuar , el modo raw se utiliza para que todos los caracteres puedan pasar al proceso actual.Si el proceso actual no detecta las señales de control del trabajo, se detendrá si se envía una señal de parada (por defecto ^ Z). Para reiniciarlo, envíe una señal de continuación (por ejemplo, "kill -CONT"). Si realmente desea enviar un SIGSTOP a dicho proceso (por ^ Z), considere generar primero csh y luego ejecutar su programa. Por otro lado, si desea enviar un SIGSTOP aEsperar En sí, primero llame al intérprete (tal vez utilizando un carácter de escape) y luego presione ^ Z.
Los pares de cuerdas se pueden usar como una abreviatura para evitar tener que ingresar al intérprete y ejecutar comandos de forma interactiva. El modo terminal anterior se usa mientras se ejecuta el cuerpo de un par de cuerdas-cuerpo.
Para la velocidad, las acciones se ejecutan en modo raw de forma predeterminada. los-Reiniciar bandera reinicia el terminal al modo que tenía antesinteractuar Fue ejecutado (invariablemente, en modo cocido). Tenga en cuenta que los caracteres ingresados cuando se cambia el modo pueden perderse (una característica desafortunada del controlador del terminal en algunos sistemas). La única razón para usar-Reiniciar es si tu acción depende de correr en modo cocinado.
los-eco la bandera envía los caracteres que coinciden con el siguiente patrón al proceso que los generó a medida que se lee cada carácter. Esto puede ser útil cuando el usuario necesita ver los comentarios de patrones parcialmente escritos.
Si un patrón se repite, pero finalmente no coincide, los caracteres se envían al proceso generado. Si el proceso generado se hace eco de ellos, el usuario verá los caracteres dos veces.-eco Es probable que solo sea apropiado en situaciones en las que es poco probable que el usuario no complete el patrón. Por ejemplo, el siguiente extracto es de rftp, el script recursive-ftp, donde se le pide al usuario que ingrese ~ g, ~ p, o ~ l, para obtener, poner o listar recursivamente el directorio actual. Estos están tan lejos de los comandos ftp normales, que es poco probable que el usuario escriba ~ seguido de otra cosa, excepto por error, en cuyo caso, probablemente ignorarán el resultado de todos modos.
interactuar {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}
los-nobuffer La bandera envía caracteres que coinciden con el siguiente patrón en el proceso de salida a medida que se leen los caracteres.
Esto es útil cuando desea que un programa devuelva el patrón. Por ejemplo, lo siguiente podría usarse para monitorear dónde está marcando una persona (un módem de estilo Hayes). Cada vez que se ve "atd", el script registra el resto de la línea.
proc lognumber {} {interact -nobuffer -re "(. *) r" return pone $ log "formato de reloj reloj segundos: marcado $ interact_out (1, string)"} interact -nobuffer "atd" lognumber
Duranteinteractuar , uso previo delog_user se ignora En particular,interactuar forzará que su salida sea registrada (enviada a la salida estándar) ya que se presume que el usuario no desea interactuar a ciegas.
los-o El indicador hace que se apliquen los siguientes pares de cuerpo de clave a la salida del proceso actual. Esto puede ser útil, por ejemplo, cuando se trata de hosts que envían caracteres no deseados durante una sesión de telnet.
Por defecto,interactuar espera que el usuario esté escribiendo stdin y leyendo stdout de laEsperar proceso en sí mismo. los-u bandera (para "usuario") haceinteractuar busque el usuario como el proceso nombrado por su argumento (que debe ser un ID generado).
Esto permite que dos procesos no relacionados se unan entre sí sin utilizar un bucle explícito. Para ayudar en la depuración, los diagnósticos Expect siempre van a stderr (o stdout para cierta información de registro y depuración). Por la misma razón, laInterprete comando leerá interactivamente desde stdin.
Por ejemplo, el siguiente fragmento crea un proceso de inicio de sesión. Luego marca al usuario (no se muestra), y finalmente conecta los dos juntos. Por supuesto, cualquier proceso puede ser sustituido por el inicio de sesión. Un shell, por ejemplo, permitiría al usuario trabajar sin proporcionar una cuenta y una contraseña.
inicio de sesión de spawn inicio de sesión set $ spawn_id spawn tip modem # marque de nuevo al usuario # conecte al usuario para iniciar sesión interact -u $ login
Para enviar resultados a múltiples procesos, enumere cada lista de ID de aparición precedida por un-salida bandera. La entrada para un grupo de ID de generación de salida puede determinarse por una lista de ID de generación precedida por un-entrada bandera. (Ambos-entrada y-salida puede tomar listas en la misma forma que la-yo bandera en elesperar comando, excepto que any_spawn_id no es significativo eninteractuar .) Todas las siguientes banderas y cadenas (o patrones) se aplican a esta entrada hasta que aparezca otra bandera de entrada. Si no-entrada aparece-salida implica "-input $ user_spawn_id -output". (Del mismo modo, con patrones que no tienen-entrada .) Si uno-entrada se especifica, anula $ user_spawn_id. Si un segundo-entrada se especifica, anula $ spawn_id. Adicional-entrada las banderas pueden ser especificadas
Los dos procesos de entrada implícitos tienen como valor predeterminado que sus salidas se especifiquen como $ spawn_id y $ user_spawn_id (al revés). Si un-entrada la bandera aparece sin-salida bandera, los caracteres de ese proceso se descartan.
los-yo flag introduce un reemplazo para el spawn_id actual cuando no hay otro-entrada o-salida Se utilizan banderas. Una bandera -i implica una bandera -o.
Es posible cambiar los procesos con los que se está interactuando mediante el uso de ID de generación indirecta. (Los identificadores de generación indirectos se describen en la sección del comando expect). Los identificadores de generación indirectos se pueden especificar con los indicadores -i, -u, -input o -output.
intérprete args
hace que se solicite interactivamente al usuarioEsperar y comandos Tcl. Se imprime el resultado de cada comando.
Acciones comodescanso ycontinuar causar estructuras de control (es decir,para , proc ) comportarse de la manera habitual. sin embargoregreso hace que el intérprete regrese a su interlocutor, mientras queinter_return causasInterprete Para provocar una devolución en su llamante. Por ejemplo, si se llama "proc"Interprete que luego ejecutó la accióninter_return , proc foo volvería. Cualquier otro comando causaInterprete para continuar pidiendo nuevos comandos.
De forma predeterminada, la solicitud contiene dos enteros. El primer entero describe la profundidad de la pila de evaluación (es decir, cuántas veces se ha llamado a Tcl_Eval). El segundo entero es el identificador de historial Tcl. La solicitud se puede configurar definiendo un procedimiento llamado "solicitud1" cuyo valor de retorno se convierte en la siguiente solicitud. Si una declaración tiene comillas abiertas, parens, corchetes o corchetes, se emitirá un aviso secundario (por defecto "+>") en la nueva línea. El indicador secundario se puede configurar definiendo un procedimiento llamado "prompt2".
DuranteInterprete , se usa el modo cocinado, incluso si su llamante estaba usando el modo sin procesar.
Si stdin está cerrado,Interprete volverá a menos que el-eof Se usa la bandera, en cuyo caso se invoca el argumento posterior.
log_file args -a file
Si se proporciona un nombre de archivo,archivo de registro grabará una transcripción de la sesión (comenzando en ese punto) en el archivo.archivo de registro dejará de grabar si no se da ningún argumento. Cualquier archivo de registro anterior está cerrado.
En lugar de un nombre de archivo, se puede proporcionar un identificador de archivo Tcl utilizando el-abierto o-dejar abierto banderas Esto es similar a ladesovar mando. (Verdesovar para más información.)
los-una El indicador obliga a que se registre la salida que fue suprimida por ellog_user mando.
Por defecto, elarchivo de registro mando anexa a los archivos antiguos en lugar de truncarlos, para la conveniencia de poder activar y desactivar el inicio de sesión varias veces en una sesión. Para truncar archivos, use la- no pasa bandera.
los-info flag hace que log_file devuelva una descripción de los argumentos de información no más recientes dados.
log_user -info | 0 | 1
De forma predeterminada, el diálogo enviar / esperar se registra en la salida estándar (y un archivo de registro si está abierto). El registro en stdout se desactiva con el comando "log_user 0" y se vuelve a habilitar con "log_user 1". El registro en el archivo de registro no ha cambiado.
los-info flag hace que log_user devuelva una descripción de los argumentos de información no más recientes que se dieron.
match_max -d -i spawn_id tamaño
define el tamaño del búfer (en bytes) utilizado internamente poresperar . Con ningún tamaño argumento, se devuelve el tamaño actual.
Con el-re bandera, se establece el tamaño predeterminado. (El valor predeterminado inicial es 2000.) Con el-yo indicador, el tamaño se establece para el ID de spawn nombrado, de lo contrario, se establece para el proceso actual.
overlay - # spawn_id - # spawn_id … programa args
ejecuta "programa args "en lugar de la corrienteEsperar programa, que termina. Un argumento de guión simple fuerza un guión delante del nombre del comando como si fuera un shell de inicio de sesión. Todos los spawn_ids están cerrados, excepto aquellos nombrados como argumentos. Estos se asignan a los identificadores de archivos nombrados.
Los spawn_ids se asignan a identificadores de archivo para que el nuevo programa se herede. Por ejemplo, la siguiente línea ejecuta ajedrez y permite que sea controlado por el proceso actual, por ejemplo, un maestro de ajedrez.
overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id chess
Esto es más eficiente que "interactuar -u", sin embargo, sacrifica la capacidad de hacer una interacción programada ya queEsperar El proceso ya no está en control.
Tenga en cuenta que no se proporciona ningún terminal de control. Por lo tanto, si desconecta o vuelve a asignar la entrada estándar, los programas que realizan el control del trabajo (shells, inicio de sesión, etc.) no funcionarán correctamente.
paridad -d -i spawn_id valor
define si la paridad debe mantenerse o eliminarse de la salida de los procesos generados. Si valor es cero, la paridad se elimina, de lo contrario no se elimina. Con ningún valor argumento, se devuelve el valor actual.
Con el-re bandera, se establece el valor de paridad predeterminado. (El valor predeterminado inicial es 1, es decir, la paridad no se elimina). Con la-yo indicador, el valor de paridad se establece para el ID de spawn nombrado, de lo contrario, se establece para el proceso actual.
remove_nulls -d -i spawn_id valor
define si los nulos se conservan o se eliminan de la salida de los procesos generados antes de que el patrón coincida o se almacene en la variable expect_out o interact_out . Si valor es 1, se eliminan los nulos. Si valor es 0, los nulos no se eliminan. Con ningún valor argumento, se devuelve el valor actual.
Con el-re bandera, se establece el valor predeterminado. (El valor predeterminado inicial es 1, es decir, se eliminan los nulos). Con el-yo indicador, el valor se establece para el ID de spawn nombrado, de lo contrario, se establece para el proceso actual.
Si se eliminan o no los nulos,Esperar registrará bytes nulos en el registro y la salida estándar.
enviar -flags cadena
Envía cuerda al proceso actual. Por ejemplo, el comando
enviar "hola mundo r"
envía los caracteres, h e l l o w o r l d al proceso actual. (Tcl incluye un comando similar a printf (llamadoformato ) que puede construir cadenas arbitrariamente complejas.
Los caracteres se envían inmediatamente, aunque los programas con entrada de línea no leerán los caracteres hasta que se envíe un carácter de retorno. Un carácter de retorno se denota " r".
los-- flag obliga a que el siguiente argumento se interprete como una cadena en lugar de una bandera.Cualquier cadena puede ir precedida por "-" independientemente de que parezca o no una bandera. Esto proporciona un mecanismo confiable para especificar cadenas variables sin que se vean atrapados por aquellos que accidentalmente parecen banderas. (Todas las cadenas que comienzan con "-" están reservadas para futuras opciones).
los-yo flag declara que la cadena se envía al spawn_id nombrado. Si el spawn_id es user_spawn_id , y el terminal está en modo sin procesar, las nuevas líneas en la cadena se convierten a secuencias de nueva línea de retorno para que aparezcan como si el terminal estuviera en modo preparado. los-crudo bandera deshabilita esta traducción.
los-nulo bandera envía caracteres nulos (0 bytes). Por defecto, se envía un nulo. Un entero puede seguir el-nulo para indicar cuántos nulos enviar.
los-descanso La bandera genera una condición de ruptura. Esto solo tiene sentido si el ID de spawn se refiere a un dispositivo tty abierto a través de "spawn -open". Si ha generado un proceso como la propina, debe usar la convención de la propina para generar un descanso.
los-s la bandera obliga a que la salida se envíe "lentamente", por lo tanto, evite la situación común en la que una computadora supera a un búfer de entrada que fue diseñado para un humano que nunca superaría al mismo búfer. Esta salida está controlada por el valor de la variable "send_slow" que toma una lista de dos elementos. El primer elemento es un número entero que describe el número de bytes que se envían atómicamente. El segundo elemento es un número real que describe la cantidad de segundos por los cuales se deben separar los envíos atómicos. Por ejemplo, "set send_slow {10 .001}" forzaría a "send -s" a enviar cadenas con 1 milisegundo entre cada 10 caracteres enviados.
los-h La bandera obliga a que la salida se envíe (algo) como un humano que escribe. Aparecen retrasos de tipo humano entre los personajes. (El algoritmo se basa en una distribución de Weibull, con modificaciones que se adaptan a esta aplicación en particular). Esta salida está controlada por el valor de la variable "send_human" que toma una lista de cinco elementos. Los dos primeros elementos son un tiempo promedio entre los caracteres en segundos. El primero se utiliza por defecto. El segundo se usa al final de las palabras, para simular las pausas sutiles que ocasionalmente ocurren en tales transiciones. El tercer parámetro es una medida de variabilidad donde .1 es bastante variable, 1 es razonablemente variable y 10 es bastante invariable. Los extremos son 0 hasta el infinito. Los dos últimos parámetros son, respectivamente, un tiempo mínimo y máximo de interarrival. El mínimo y el máximo se usan al final y "recortan" la última vez. El promedio final puede ser bastante diferente del promedio dado si los valores de clip suficiente mínimo y máximo.
Como ejemplo, el siguiente comando emula un mecanógrafo rápido y consistente:
set send_human {.1 .3 1 .05 2} enviar -h "Tengo hambre. Hagamos el almuerzo".
mientras que lo siguiente podría ser más adecuado después de una resaca:
set send_human {.4 .4 .2 .5 100} enviar -h "¡Buena fiesta, noche de azotes!"
Tenga en cuenta que los errores no se simulan, aunque puede configurar usted mismo las situaciones de corrección de errores incorporando errores y correcciones en un argumento de envío.
Las banderas para enviar caracteres nulos, para enviar interrupciones, forzar la salida lenta y para la salida de estilo humano son mutuamente excluyentes. Solo se utilizará el último especificado. Además, no cuerda El argumento se puede especificar con los indicadores para enviar caracteres nulos o saltos.
Es una buena idea preceder a la primera.enviar a un proceso por unesperar. esperar esperará a que comience el proceso, mientrasenviar no poder. En particular, si el primeroenviar se completa antes de que el proceso comience a ejecutarse, corre el riesgo de que se ignoren sus datos. En situaciones donde los programas interactivos no ofrecen una solicitud inicial, puede precederenviar por un retraso como en:
# Para evitar dar pistas a los hackers sobre cómo ingresar, # este sistema no solicita una contraseña externa. # Espere 5 segundos para que el ejecutivo complete el spawn telnet very.secure.gov sleep 5 envíe la contraseña r
exp_send es un alias para enviar. Si está utilizando Expectk o alguna otra variante de Expect en el entorno Tk,enviar Está definido por Tk para un propósito completamente diferente.exp_send Se proporciona para la compatibilidad entre entornos. Se proporcionan alias similares para los otros comandos de envío de Expect.
send_error -flags cadena
es comoenviar , excepto que la salida se envía a stderr en lugar del proceso actual.
send_log - cadena
es comoenviar , excepto que la cadena solo se envía al archivo de registro (verarchivo de registro .) Los argumentos se ignoran si no hay ningún archivo de registro abierto.
send_tty -flags cadena
es comoenviar , excepto que la salida se envía a / dev / tty en lugar del proceso actual.
Send_user -flags cadena
es comoenviar , excepto que la salida se envía a la salida estándar en lugar del proceso actual.
segundos de sueño
hace que el script se duerma durante el número de segundos dado. Los segundos pueden ser un número decimal. Las interrupciones (y los eventos Tk si está utilizando Expectk) se procesan mientras espera espera.
Programa de spawn args args
crea un nuevo proceso en ejecución "programa args ". Su stdin, stdout y stderr están conectados a Expect, para que puedan ser leídos y escritos por otrosEsperar comandos La conexión está interrumpida porcerrar o si el proceso mismo cierra cualquiera de los identificadores de archivo.
Cuando un proceso es iniciado pordesovar , La variable spawn_id se establece en un descriptor que se refiere a ese proceso. El proceso




