scripting exec tcl expect spawn

scripting - ¿Cuál es la diferencia entre spawn y exec?



tcl expect (4)

Por lo que yo sé, spawn devuelve un ID de proceso (y enlaces con Expect), mientras que el ejecutivo simplemente devuelve el stdout final, a menos que pase "&". Por lo tanto, no afectará sus expectativas.

Estoy aprendiendo a escribir un script TCL (esperar) y veo que algunos ejemplos muestran el uso de spawn, mientras que otros muestran el comando exec. Intenté buscar en Google, pero no puedo encontrar cuál es la diferencia.

Supongamos que llamo a ''exec'' en medio de un largo script de espera, ¿qué puedo esperar que suceda?


Una forma más simple de responder la pregunta es reformularla para preguntar cuándo debe usar exec vs spawn. En resumen, use spawn para comandos interactivos y exec para comandos no interactivos.


También vale la pena señalar que algunos (¿muchos?) Programas se comportan de manera diferente cuando los ejecuta un usuario (es decir, en la línea de comandos) frente a ser parte de un proceso por lotes / ejecución de otro proceso. La diferencia real es si hay una terminal conectada al proceso.

El comando spawn, parte de la extensión Expect para Tcl, configura las cosas para que el programa ejecutado se vea como ejecutado por un usuario, y luego agrega funcionalidad para permitir que el programa tcl interactúe con el programa externo de una manera conveniente (es decir, haciendo coincidir se envía a través de expresiones regulares y ramifica esas coincidencias). Las cosas que se ejecutan a través de spawn se ejecutan de forma asíncrona.

El comando exec es un comando core Tcl que ejecuta el otro programa y devuelve su salida. No hace ninguna de las complicadas configuraciones que genera, pero puede ser muy útil solo para ejecutar un programa y ver su salida (y su código de retorno). Las cosas que ejecuta Exec son, de forma predeterminada, ejecutadas de forma síncrona, pero un símbolo de unión al final del comando hace que se ejecute en segundo plano (al igual que las secuencias de comandos de shell tradicionales).

El comando abrir, aunque generalmente se usa para leer / escribir archivos, también se puede usar para ejecutar procesos externos. Al anteceder el nombre del comando con el símbolo de tubería (|), le dice que ejecute un proceso externo y obtenga acceso a los descriptores de archivos de lectura / escritura para interactuar con el proceso resultante. Esta es una especie de término medio entre el ejecutor y el engendro, con mucha más interacción con el proceso disponible, pero sin la complicada configuración ambiental que genera. Puede ser extremadamente útil para interactuar con programas que requieren entrada, pero todavía están bastante bien configurados para la automatización.


spawn es un comando expect no un comando tcl . exec es un comando tcl .

spawn crea un proceso. La entrada y la salida de los procesos están conectadas para esperar que los otros comandos de esperar los utilicen: send , expect e interact .

exec crea un subproceso bajo tcl. En general, el tcl se suspende hasta que el subproceso se completa. Sin embargo, uno puede crear el subproceso en segundo plano (usando & como el último argumento) y si uno engancha la entrada y la salida correctamente, tcl puede interactuar con el subproceso. Esto es muy torpe y es exactamente el tipo de interacción que esperamos fue diseñada para manejar sin problemas.