Windows bash 脚本到 运行 来自 WSL 的东西

Windows bash script to run something from WSL

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

  1. 为 Linux (WSL) 和
  2. 启动 Windows 子系统
  3. 在 WSL 中 cd 到“../myfolder/”
  4. 运行 ./foo first_parameter second_parameter
  5. 等到完成并退出 WSL
  6. cd Windows 到“../myWinFolder/”
  7. 运行 Foo.exe parameter
  8. 等到完成

这是我的尝试:

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

但遗憾的是,CMD 在 运行 执行 EXE 之前没有等待 WSL 完成。

有什么我可以做的吗?

我很高兴 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 脚本中的内容。我怀疑这是 运行 在后台执行任务或 运行 立即 returns 执行某些操作。这可以通过在睡眠之后放置 & 来模拟,以便它 运行 在 wsl sleep 2s & 的背景中。当您执行此操作时,您会看到脚本的执行没有暂停。

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