如何使用 wsl.exe 在 Windows 10 中執行 Tcl/tk 腳本的 Linux cli 工具?

如何使用 wsl.exe 在 Windows 10 中執行 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 (debianstretch) 中,相同的 tcl/tk 腳本運行起來就像一個魅力,包括與任何外部應用程式的互動。

現在,根據公司政策,我需要讓所有這些在 Windows 10 下運行。 8.5(Windows 版本)和Expect 5.45,透過茶壺。

Tcl 腳本本身按預期運行,包括願望 GUI、串行通信,甚至來自/到 DUT 嵌入式硬體的以太網通信,但我仍然無法啟動並與外部程式對話,例如 ping 和其他一些 Linux cli 應用程序,使用wsl.exe 介面。

如果我透過在Windows 資源管理器中點擊或從(Windows CMD-) 命令shell 手動啟動wsl.exe,我會在虛擬終端中收到bash 提示符,並且可以按預期互動式鍵入所有必需的工具命令。

但無論我嘗試從 Tcl 腳本啟動 wsl.exe,使用(期望)“spawn”命令,甚至簡單地:

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

我收到 wsl.exe 的「檔案未找到」或根本沒有回應。

如何執行 wsl.exe 並從 Windows 域中運行的 Tcl 腳本中運行 Linux 程序,“以編程方式”並與其交互(由 Expect 處理 stdin/stdout/stderr)?

即使從 Tcl 解釋器 %-shell 提示字元(tclsh85 或 Wish85)中呼叫「% dir C:\Windows\system32\ws*.exe」也不會顯示任何結果,儘管檔案 WSL.EXE 肯定存在於該 Windows 中系統資料夾?

答案1

但無論我嘗試從 Tcl 腳本啟動 wsl.exe,使用(期望)“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

相關內容