我想通过运行 Ubuntu 20 的 WSL 自动为 Linux 编译我的程序,以便我可以设置一个 IDE 任务窗口端,它将在 Linux 上为我进行编译。我想制作一个 win32 应用程序来启动 Ubuntu 可执行文件并将命令发送到它的标准输入,就好像我手动输入它们一样,但是由于 Ubuntu 是 UWP,我认为这不可能吗?自动化脚本的参数将是主源文件目录的路径、主源文件名以及从 1 到 4-5 个其他开关的任何位置。我希望自动化是沉默的。自动命令示例:
cd /mnt/<provided path>
compiler -switch1 -switch2 -switch3 -out <provided executable file name> <provided source file name>
由于在 .bashrc 中设置了环境变量,因此可以从任何地方访问编译器。
老实说,我在扫描过快之后才对答案进行了
bash.exe
投票,然后才意识到它是推荐的(过时的)bash.exe
。因此,我将提供我希望的“更好的答案”。请注意,
bash.exe
Microsoft 将其列为“历史命令”,在我看来,这仅比“已弃用”高出一步。当前推荐的启动 WSL 实例的方法是使用
wsl.exe
命令(或仅wsl
在从 PowerShell、CMD 或任一解释器下的脚本调用时)。例如(使用bash.exe
上一个问题的示例):给定一个文件
/mnt/c/Temp/your_script.sh
(当然设置为可执行文件)包含:然后
wsl -e "/mnt/c/Temp/your_script.sh"
(在 PowerShell 中)将执行该文件并导致:wsl的
-e
(also ) 参数作为默认 shell--exec
运行它后面的任何命令。因此,在不调用(甚至)的情况下进行目录列表也是如此。wsl -e ls
bash
sh
shebang-in-a-script 方法是在 中运行命令的一种方法,
bash
但您也可以调用一个(或多个)命令,例如:但请注意:
至少在PowerShell中不起作用,因为 PowerShell 具有令人讨厌的“功能”,即在通过
\r
管道传输到控制台可执行文件(例如wsl.exe
.除其他功能外,
wsl.exe
还可以:wsl -d kali
) ,则在不同的 WSL 实例中启动或运行命令wsl -u root visudo
)WSL 使得从另一个环境运行应用程序变得非常容易 - 在两个方向上。在 Windows 中,您可以使用
C:\Windows\System32\bash.exe
WSL GNU/Linux 中的 Bash 启动任何命令。例如 - 脚本:
或者要运行的命令:
请注意使用适合每个环境的正确文件系统路径,并且从 Windows 传递到 Bash 的脚本需要使用 Linux 换行符进行编码。