【发布时间】:2018-02-12 15:26:44
【问题描述】:
我在 MSYS2 项目内部使用make,一般没有问题。但是,如果我使用 zsh,我将无法切换子系统。例如:
source shell mingw64
给予:
/usr/bin/shell:58: bad substitution
显然,shell 脚本中有特定于 bash 的代码,并且该脚本是有源代码的,因为它在调用 shell 中设置了环境变量。
可以修复此修改 shell 代码,但在下一个 pacman -Syu 之后可能会被覆盖或变得不兼容。
是否有在 zsh 中获取 Bash 脚本的通用解决方案(或特定于切换 MSYS 子系统的解决方案)?
【问题讨论】:
-
如果你关心这个,你可能应该向github.com/AlexPux/MSYS2-packages 提出拉取请求。
-
目前,尚不清楚
make在其中扮演什么角色。是否从Makefile调用了source命令?你能提供一个minimal reproducible example吗?如果您的source shell mingw64命令是 MCVE,那么Make 与该问题有什么关系? -
@CharlesDuffy:是的,MCVE 是在 zsh 中执行的
source shell mingw64。我提到make是因为使用 MSYS2 的令人信服的原因是在 Windows 中“制作”GNU/POSIX 程序的二进制文件。您在 mingw 子系统下获得 POSIX 仿真,并且本机二进制文件切换到 mingwXX 子系统。当然,没有什么可以阻止使用 MSYS2 只是为了使用 Linux shell 的乐趣,例如 zsh。在后一种情况下,shell不起作用。我不是在问如何从 bash 中获取 zsh,因为我认为没有通用的解决方案。但是,应该也可以从 zsh 切换 MSYS2 子系统。 -
@antonio, ...这就是为什么上游有一个开放的票证要求 msys
shell命令的版本与所有符合 POSIX 的 shell 兼容。无论如何,据我所知,如果没有将 Windows 系统放在一起(或审核shell命令的源以确定它是否执行任何无法通过环境继承的事情),我已经回答了您的问题;如果您使用给定的bash -c命令,它应该启动一个新的 zsh shell,配置为为 mingw64 目标构建软件。