从 WSL 运行某些东西的 Windows bash 脚本

Posted

技术标签:

【中文标题】从 WSL 运行某些东西的 Windows bash 脚本【英文标题】:Windows bash script to run something from WSL 【发布时间】:2020-05-25 21:37:12 【问题描述】:

我正在尝试写下一个 Windows bash 脚本:

    启动适用于 Linux 的 Windows 子系统 (WSL) 和 在 WSL 中 cd 到“../myfolder/” 运行./foo first_parameter second_parameter 等到完成并退出 WSL 在 Windows 中 cd 到“../myWinFolder/” 运行Foo.exe parameter 等到完成

这是我的尝试:

bash -c "cd ../myFolder/ && ./foo first_parameter second_parameter"
cd ..
cd myWinFolder
START /WAIT Foo.exe parameter

但遗憾的是,CMD 在运行 EXE 之前不会等待 WSL 完成。

我能做什么?

【问题讨论】:

【参考方案1】:

我很高兴 dos 和 WSL 之间的互操作实际上确实在等待命令完成。请尝试以下操作:

在名为 runit.bat 的文件中

echo bat01
bash -c "echo bat02; cd ./bash/; ./runit.sh; echo bat03"
echo bat04

在名为 ./bash/ 的子文件夹中,将以下内容粘贴到名为 runit.sh 的文件中

echo sh01 
sleep 2s 
echo sh02 

当您在 dos 中运行 runit.bat 时,您会看到等待 2 秒

您尚未指定 ./foo 脚本中的内容。我怀疑它正在后台运行任务或运行立即返回的任务。这可以通过在睡眠后放置& 来模拟,以便它在wsl sleep 2s & 内的后台运行。当您这样做时,您会看到脚本的执行没有暂停。

所以我会检查 ./foo 可能会在其中添加一些 echo 调试语句并首先从 WSL 中运行它,以确保它确实等到所有命令都完成后再退出。

【讨论】:

以上是关于从 WSL 运行某些东西的 Windows bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

获取 err_connection_refused 从 Windows 访问在 wsl2 上运行的 django,但可以从 Windows 终端卷曲

如何使用 127.0.0.1 从 Windows 主机访问在 WSL2 中运行的服务?

如何从本地网络访问运行在 WSL(Linux 的 Windows 子系统)上的 Web 服务器

在wsl中运行Windows应用程序(如VSCode)

Windows写代码,Linux运行 (WSL & VS Code)

如何从 WSL 连接到本地 Windows SQL Server 实例?