我想在我的 Windows 主机上从 WSL 执行一个 shell 命令。具体来说,我想执行该命令,qemu-system-i386 -s -S -fda out/floppy.img
因为我正在构建一个软件,我想使用 Makefile 运行该命令以显示输出。
简单来说,我想从虚拟机内部调用主机上的 shell 命令;这与使用类似方法从主机调用虚拟机上的命令的方式相反wsl <command>
。我希望我对要做的事情的解释足够清楚。我在网上找不到任何东西,所以我在这里问。
这可能吗?
答案1
去https://learn.microsoft.com/en-us/windows/wsl/filesystems查看解决方案。我已将与此特定问题相关的部分复制到下面。
从 Linux 运行 Windows 工具
WSL 可以使用 [tool-name].exe 直接从 WSL 命令行运行 Windows 工具。例如,notepad.exe。
以这种方式运行的应用程序具有以下属性:
- 将工作目录保留为 WSL 命令提示符(大多数情况下——例外情况如下所述)。
- 具有与WSL进程相同的权限。
- 以活动的 Windows 用户身份运行。
- 出现在 Windows 任务管理器中,就像直接从 CMD 提示符执行一样。在 WSL 中运行的 Windows 可执行文件的处理方式与本机 Linux 可执行文件类似 - 管道、重定向,甚至后台工作均按预期进行。
要运行 Windows 工具 ipconfig.exe,使用 Linux 工具 grep 过滤“IPv4”结果,并使用 Linux 工具 cut 删除列字段,从 Linux 发行版(例如 Ubuntu)中输入:
Bash
ipconfig.exe | grep IPv4 | cut -d: -f2
让我们尝试一个混合 Windows 和 Linux 命令的示例。打开您的 Linux 发行版(即 Ubuntu)并创建一个文本文件:touch foo.txt。现在使用 Linux 命令 ls -la 列出直接文件及其创建详细信息,再加上 Windows PowerShell 工具 findstr.exe 来过滤结果,以便只有您的 foo.txt 文件显示在结果中:
Bash
ls -la | findstr.exe foo.txt
Windows 工具必须包含文件扩展名、匹配文件大小写并且可执行。不可执行文件包括批处理脚本。可以使用 cmd.exe /C 命令运行 dir 等 CMD 本机命令。
例如,通过输入以下内容列出 Windows 文件系统 C:\ 目录的内容:
Bash
cmd.exe /C dir
或者使用 ping 命令向 microsoft.com 网站发送回显请求:
Bash
ping.exe www.microsoft.com
参数未经修改就传递给 Windows 二进制文件。例如,以下命令将在 notepad.exe 中打开 C:\temp\foo.txt:
Bash
notepad.exe "C:\temp\foo.txt"
这也行得通:
Bash
notepad.exe C:\\temp\\foo.txt