我试图让custom build tasks使用bash在Visual Studio 2017中构建基于DocBook的文档。我在Windows 10中使用内置的Windows子系统Linux。我可以启动cmd.exe和像在MS的示例中一样运行dir
。但是,我需要在bash中运行make ARGS
以及我失败的地方:
'"bash"' is not recognized as an internal or external command,
operable program or batch file.
我可以交互式运行cmd.exe并启动bash而不会出现任何问题。但它在Visual Studio中失败了。 VS2017是否使用了一些特殊的环境?如何让它通过这些任务运行bash?我想我错过了一些非常简单和琐碎的事情,但我不明白在哪里看。
基本上,我想使用DocBook源对路径运行make all-html
命令。
这是一个最小的任务示例:
{
"version": "0.2.1",
"tasks": [
{
"taskName": "Build all-html",
"appliesTo": "*",
"type": "command",
"command": "bash"
}
]
}
答案 0 :(得分:3)
命令没有像您期望的那样自然地找到bash
的原因是因为Visual Studio是一个32位程序。这意味着在指定命令时它不会使用64位cmd.exe。
您可以通过打开32位命令窗口C:\Windows\SysWOW64\cmd.exe
并从那里尝试bash
命令来重现Visual Studio正在执行的操作。
解决方案是直接通过bash.exe
虚拟文件夹调用C:\Windows\Sysnative
。
您可以找到Sysnative文件夹的讨论/说明以及必要的原因here in the official Bash on Windows GitHub。
以下是一个适合您的示例命令:
{
"taskName": "print-pwd",
"appliesTo": "*",
"type": "command",
"command": "%WINDIR%\\Sysnative\\bash.exe",
"args": [
"-c",
"pwd"
]
}
答案 1 :(得分:1)
在您的链接中,文档提供了一个使用cmd列出输出的示例:您应该使用${env.COMSPEC}
来使用cmd.exe
,然后将bash
作为参数。
{
"version": "0.2.1",
"tasks": [
{
"taskName": "Build all-html",
"appliesTo": "*",
"type": "command",
"command": "${env.COMSPEC}",
"args": [
"bash"
]
}
]
}
这是以交互模式运行bash,但您可以使用bash -c
这样的bash命令:bash -c 'echo "$PATH"'
。
注意:这会在解决方案的根目录下运行bash(您可以使用bash -c 'echo $PWD'
进行检查。)