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

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

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

这是我的尝试:

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 中运行它,以确保它确实等到所有命令都完成后再退出。

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      相关资源
      最近更新 更多