从 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 服务器