Para una aplicación de prueba de hardware, tengo que ejecutar e interactuar con un par de aplicaciones cli externas, por ejemplo, un ping de Linux a una determinada dirección IP local, desde un script Tcl/Tk.
En Windows 7 (y también en XP, hace un par de años), hice esto en un entorno Cygwin, usando Tcl8.5 y Expect 5.45 de Cygwin, con buen éxito. Podría generar un bash y luego hablar con 'ping', 'ls', 'touch' y varias otras herramientas usando los comandos expect de tcl. Cuando cierro el bash después con 'exit', el proceso del shell finaliza y puedo repetirlo con otros comandos tantas veces como sea necesario.
En Linux (Debian Stretch), los mismos scripts tcl/tk se ejecutan a la perfección, incluida la interacción con cualquier aplicación externa.
Ahora, según la política de la empresa, debo ejecutar todo esto en Windows 10. Leí, hablé con colegas e instalé el subsistema de Windows para Linux (WSL) con una imagen wsl de Ubuntu 18.04, en mi máquina y ActiveState Tcl. 8.5 (versión de Windows) y Expect 5.45 también, vía tetera.
Los scripts Tcl se ejecutan como se esperaba, incluida una GUI de deseo, comunicación en serie e incluso comunicación Ethernet desde/hacia el hardware integrado del DUT, pero aún así no puedo iniciar ni hablar con programas externos, como ping y algunas otras aplicaciones cli de Linux. utilizando la interfaz wsl.exe.
Si inicio wsl.exe manualmente, haciendo clic en el Explorador de Windows o desde un shell de comandos (CMD de Windows), obtengo el indicador de bash en la terminal virtual y puedo escribir todos los comandos de herramientas necesarios de forma interactiva como es de esperar.
Pero sea lo que sea, intento iniciar wsl.exe desde mis scripts Tcl, usando el comando (Esperar-) 'spawn' o incluso simplemente:
ejecutivo C:\\Windows\\system32\\wsl.exe $lnxcmd $params,
Recibo "archivo no encontrado" para wsl.exe o no recibo ninguna respuesta.
¿Cuál es el truco para ejecutar wsl.exe y ejecutar un programa de Linux desde un script Tcl que se ejecuta en el dominio de Windows, 'progamáticamente' e interactuar (stdin/stdout/stderr manejado por Expect) con él?
Incluso un '% dir C:\Windows\system32\ws*.exe' invocado desde el intérprete Tcl %-shell (tclsh85 o wish85) no muestra un solo resultado, aunque el archivo WSL.EXE definitivamente está presente dentro de ese Windows carpeta del sistema?
Respuesta1
Pero sea lo que sea, intento iniciar wsl.exe desde mis scripts Tcl, usando el comando (Esperar-) 'spawn' o incluso simplemente:
ejecutivo C:\Windows\system32\wsl.exe $lnxcmd $params,
Recibo "archivo no encontrado" para wsl.exe o no recibo ninguna respuesta.
Tal vez tu ruta sea incorrecta, no uso Tcl/tk pero por lo que puedo leer aquí:https://www.tcl.tk/man/tcl8.3/TclCmd/filename.htm#M26 La forma en que escribes tu camino no es la buena.
Además, si desea lanzar un comando de Linux en wsl, le sugiero que utilice el parámetro -e:wsl -e ping 192.168.1.1