【问题标题】:Windows bash script to run something from WSL从 WSL 运行某些东西的 Windows bash 脚本
【发布时间】: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 完成。
我能做什么?
【问题讨论】:
标签:
bash
windows-subsystem-for-linux
【解决方案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 中运行它,以确保它确实等到所有命令都完成后再退出。