Como executar uma ferramenta linux cli, usando wsl.exe, a partir de um script Tcl/tk no Windows 10?

Como executar uma ferramenta linux cli, usando wsl.exe, a partir de um script Tcl/tk no Windows 10?

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

informação relacionada