Para um aplicativo de teste de hardware, preciso executar e interagir com alguns aplicativos CLI externos, por exemplo, um ping do Linux para um determinado endereço IP local, a partir de um script Tcl/Tk.
No Windows 7 (e no XP também, alguns anos atrás), fiz isso em um ambiente Cygwin, usando o Tcl8.5 e o Expect 5.45 do Cygwin, com bom sucesso. Eu poderia gerar um bash e então falar com 'ping', 'ls', 'touch' e várias outras ferramentas usando os comandos esperados do tcl. Quando fecho o bash posteriormente com 'exit', o processo do shell termina e posso repetir isso com outros comandos quantas vezes for necessário.
No Linux (debian stretch), os mesmos scripts tcl/tk são executados perfeitamente, incluindo interação com quaisquer aplicativos externos.
Agora, pela política da empresa, sou obrigado a fazer tudo isso rodar no Windows 10. Li, discuti com colegas e instalei o subsistema windows para Linux (WSL) com uma imagem wsl do Ubuntu 18.04, na minha máquina e ActiveState Tcl 8.5 (versão Windows) e Expect 5.45 também, via bule.
Os próprios scripts Tcl são executados conforme o esperado, incluindo uma GUI desejada, comunicação serial e até comunicação Ethernet de/para o hardware incorporado DUT, mas ainda não consigo iniciar e conversar com programas externos, como ping e alguns outros aplicativos linux cli, usando a interface wsl.exe.
Se eu iniciar o wsl.exe manualmente, clicando no Windows Explorer ou em um shell de comando (Windows CMD-), recebo o prompt do bash no terminal virtual e posso digitar todos os comandos de ferramenta necessários interativamente, conforme esperado.
Mas tudo o que eu tento iniciar wsl.exe a partir de meus scripts Tcl, usando o comando (Expect-) 'spawn' ou simplesmente:
exec C:\\Windows\\system32\\wsl.exe $lnxcmd $params ,
Recebo 'arquivo não encontrado' para wsl.exe ou nenhuma resposta.
Qual é o truque para executar wsl.exe e executar um programa Linux a partir de um script Tcl em execução no domínio do Windows, 'progamaticamente' e interagir (stdin/stdout/stderr manipulado pelo Expect) com ele?
Mesmo um '% dir C:\Windows\system32\ws*.exe' invocado de dentro do prompt %-shell do interpretador Tcl (tclsh85 ou wish85) não mostra um único resultado, embora o arquivo WSL.EXE esteja definitivamente presente nesse Windows pasta do sistema?
Responder1
Mas tudo o que eu tento iniciar wsl.exe a partir de meus scripts Tcl, usando o comando (Expect-) 'spawn' ou simplesmente:
exec C:\Windows\system32\wsl.exe $lnxcmd $params ,
Recebo 'arquivo não encontrado' para wsl.exe ou nenhuma resposta.
Talvez seu caminho esteja errado, eu não uso Tcl/tk mas pelo que posso ler aqui:https://www.tcl.tk/man/tcl8.3/TclCmd/filename.htm#M26 A maneira como você escreve seu caminho não é a boa.
Além disso, se você quiser lançar o comando Linux no wsl, sugiro usar o parâmetro -e:wsl -e ping 192.168.1.1