有没有办法在 zsh 中获取任意 bash 脚本(即 msys2-packages "shell")?



我在MSYS2项目中使用make,通常没有问题。但是,如果我使用ZSH,我将无法切换子系统。例如:

source shell mingw64

给出:

/usr/bin/shell:58: bad substitution

显然,shell脚本中有BASH特定代码,并且该脚本是通过来源的,因为它在调用Shell中设置了环境变量。

一个人可以修复此修订的shell代码,但是在下一个pacman -Syu之后,它可以被覆盖或变得不兼容。

是否有一个通用解决方案可以源用于ZSH中的bash脚本(或特定于切换MSYS子系统的解决方案(?

您不能在ZSH中解释任意bash脚本,但是您可以启动带有方向的bash的新副本,以源脚本,然后将控件移交给ZSH解释器:

bash -c 'set -a; source shell mingw64 && exec zsh -i'

ZSH解释器因此将通过采购BASH脚本来继承导出的环境变量和工作目录更改;它不会继承 shell shell-local(非出口(变量,别名或函数。

set -a指示bash默认情况下导出所有变量,从而确保您的来源脚本设置的变量是在可能放置在环境中而不是保留壳本地的情况下。这对无法导出的类型值(例如数组(不起作用,而是合理的临时度量。


顺便说一句 - 有一个上游票,要求将此代码与/bin/sh兼容。如果发生这种情况,ZSH将能够在Posix兼容模式下解释它,您可以暂时输入如下:

emulate sh -c 'source shell mingw64'

最新更新