Bash 如何使用installScript在Ubuntu中运行.sh文件

Bash 如何使用installScript在Ubuntu中运行.sh文件,bash,ubuntu-16.04,installshield,installscript,Bash,Ubuntu 16.04,Installshield,Installscript,我正在windows 10中使用InstallShield 2018创建安装。我需要从Installscript中的函数在Ubuntu中执行一个脚本文件(.sh)。我尝试了以下方法,但无效: szCmdPath = "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\WindowsApps\\Ubuntu.exe"; szCmdLine = ". /mnt/d/test.sh"; LaunchAppAndWait( szCmdPath, szCmdLine

我正在windows 10中使用InstallShield 2018创建安装。我需要从Installscript中的函数在Ubuntu中执行一个脚本文件(.sh)。我尝试了以下方法,但无效:

szCmdPath = "C:\\Users\\Admin\\AppData\\Local\\Microsoft\\WindowsApps\\Ubuntu.exe";
szCmdLine = ". /mnt/d/test.sh";
LaunchAppAndWait( szCmdPath, szCmdLine, WAIT);
不过,我可以在Ubuntu终端上执行完全相同的文件,而且效果非常好。我打开了Linux的窗口子系统,并在windows上安装了Ubuntu。为什么会这样?为什么我可以从installscript而不是Ubuntu运行cmd.exe? 先谢谢你

编辑1:如果我传递一个空字符串作为参数,Ubuntu将启动并等待我的输入命令。但是,当我将路径传递到脚本文件时,除了在安装继续运行之前终端控制台的一次闪烁之外,什么都没有发生。

来自、
wsl
ubuntu
的情况略有不同。看起来<>代码> WSL有点神奇,偶尔类似于代码> BASH-C/<代码>或<代码> ubuntu-c>代码>,而您可以考虑<代码> ubuntu.exe < /C> >与“代码>/bin /Bash < /C> >相当。

如果您尝试运行
/bin/bash/mnt/d/test.sh
在bash提示符下,事情进展不顺利。因此,正确的方法将取决于脚本的内容和需要执行的操作。我认为以下选项之一最有可能:

  • 从命令中删除
    ;而是运行
    ..\Ubuntu.exe
    /mnt/d/test.sh
  • -c
    添加到您的命令中;而是运行
    ..\Ubuntu.exe
    -c/mnt/d/test.sh
请注意,
%LOCALAPPDATA%\Microsoft\WindowsApps\Ubuntu.exe
是一个特殊文件(零字节),因此它也可能需要一些特殊处理。例如,它可能需要一个64位调用者。如果是这种情况,您可能需要通过64位cmd提示符将其包装在调用中。然而,我的快速测试并没有显示出这种可能性,所以我认为它在没有这种额外的间接性的情况下会工作