visual-studio - 从 Visual Studio 的构建后命令行运行 Linux 子系统

标签 visual-studio visual-studio-2015 windows-10 windows-subsystem-for-linux

我正在尝试从 Visual Studio 2015 的构建后命令行运行 Windows 10 Linux 子系统。也就是说,我有一个命令,其输出将通过管道传输到 bash,例如 xyz | bashbash 应该依次启动 Windows 10 Linux 子系统并执行命令。

从常规 CMD.exe 命令行或 .bat 文件运行命令时,此功能非常有效。但是,当从 Visual Studio 2015 Post-、Pre-Build- 或 Pre-Link-Event 命令行直接运行此命令时,通过 call cmd/C 调用或外部.bat文件作为代理,这会失败并显示错误代码255并打印类似“Command 'bash' 未找到。”。当尝试使用 bash.exe 的完整路径时,也会失败。

如何从 Visual Studio 的命令行运行 bash

旁注:我正在尝试在 C/C++ 项目上运行它。

最佳答案

在我的 32 位 C++ 应用程序中使用 bash 时,我也遇到了这个问题。

问题是 bash 仅适用于 64 位 - 当您尝试从 32 位应用程序使用它时,您会调用 C:\Windows\System32\bash.exe 被重定向到不存在的 C:\Windows\SysWOW64\bash.exe

要绕过重定向,您在从 32 位应用调用 bash 时必须使用 C:\Windows\Sysnative\bash.exe。实际上,我制作了一个批处理 (.bat) 代理,并将其添加到 PATH 中以使事情变得更容易。 🙂

bash.bat:

@echo off

if exist "C:\Windows\Sysnative\bash.exe" (
  C:\Windows\Sysnative\bash.exe %*
) else (
  C:\Windows\System32\bash.exe %*
)

关于visual-studio - 从 Visual Studio 的构建后命令行运行 Linux 子系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988743/

相关文章:

c++ - Visual Studio 2015 认为 Windows 10 是 Windows XP 之前的版本

c# - #if DEBUG 和 return 语句 - 无法访问的代码警告

python - Pyqt5 设计器和 Python 3.5

google-analytics - 在 UWP 应用中安装 googleanalyticssdk 时出现 Nuget 引用错误

与 sprintf 相关的 C++ 舍入行为一致性

sql-server - iif 语句什么都不做

c++ - 什么是 diff b/w Includes in VC++ Directories options 和 Additional include directories in C++ -> General in Visual Studio

c++ - 如果有 std::thread,Visual Studio 2017 linux 无法编译

visual-studio-2015 - 缺少脚手架 ASP.Net Core

wix - 使用 WiX 工具集时,当值设置为 0 时,注册表项不会更新