如何在 Windows 10 中使用 wsl.exe 从 Tcl/tk 脚本运行 Linux CLI 工具?

如何在 Windows 10 中使用 wsl.exe 从 Tcl/tk 脚本运行 Linux CLI 工具?

对于硬件测试应用程序,我必须运行并与几个外部 CLI 应用程序交互,例如从 Tcl/Tk 脚本内部对某个本地 IP 地址进行 Linux ping。

在 Windows 7 中(几年前在 XP 中也如此),我在 Cygwin 环境中使用 Cygwin 的 Tcl8.5 和 Expect 5.45 完成了此操作,取得了良好的效果。我可以生成一个 bash,然后使用 tcl 的 expect 命令与“ping”、“ls”、“touch”和其他几个工具进行对话。当我随后使用“exit”关闭 bash 时,shell 进程完成,我可以根据需要使用其他命令重复此操作。

在 Linux(debian stretch)中,相同的 tcl/tk 脚本运行顺畅,包括与任何外部应用程序的交互。

现在,根据公司政策,我必须在 Windows 10 下运行所有​​这些。我阅读、与同事讨论,并在我的计算机上安装了带有 Ubuntu 18.04 wsl 映像的 Linux 的 Windows 子系统 (WSL) 以及 ActiveState Tcl 8.5(Windows 版本)和 Expect 5.45,通过 teapot。

Tcl 脚本本身按预期运行,包括愿望 GUI、串行通信甚至来自/到 DUT 嵌入式硬件的以太网通信,但我仍然无法使用 wsl.exe 界面启动和与外部程序(如 ping 和一些其他 linux cli 应用程序)对话。

如果我通过单击 Windows 资源管理器或从(Windows CMD-)命令 shell 手动启动 wsl.exe,我会在虚拟终端中得到 bash 提示符,并且可以按照预期以交互方式键入所有所需的工具命令。

但是无论我尝试从我的 Tcl 脚本中启动 wsl.exe,使用(Expect-)'spawn'命令,甚至简单地:

执行 C:\\Windows\\system32\\wsl.exe $lnxcmd $params,

我收到 wsl.exe 的“未找到文件”提示或根本没有响应。

如何在 Windows 域中运行的 Tcl 脚本中执行 wsl.exe 并运行 Linux 程序,以“程序化”方式与其交互(由 Expect 处理的 stdin/stdout/stderr)?

甚至从 Tcl 解释器 %-shell 提示符(tclsh85 或 wish85)中调用“% dir C:\Windows\system32\ws*.exe”也不会显示任何结果,尽管文件 WSL.EXE 肯定存在于该 Windows 系统文件夹中?

答案1

但是无论我尝试从我的 Tcl 脚本中启动 wsl.exe,使用(Expect-)'spawn'命令,甚至简单地:

执行 C:\Windows\system32\wsl.exe $lnxcmd $params,

我收到 wsl.exe 的“未找到文件”提示或根本没有响应。

也许你的路径是错误的,我不使用 Tcl/tk,但从我在这里读到的内容来看:https://www.tcl.tk/man/tcl8.3/TclCmd/filename.htm#M26 您写路径的方式不太好。

此外,如果你想在 wsl 上执行 linux 命令,我建议使用 -e 参数:wsl -e ping 192.168.1.1

相关内容