有没有办法在zsh中获取任意bash脚本(即msys2-packages“shell”)
发布时间:2020-12-14 02:11:41 所属栏目:Linux 来源:网络整理
导读:我在MSYS2项目中使用make,一般没有问题.但是,如果我使用zsh,我无法切换子系统.例如: source shell mingw64 得到: /usr/bin/shell:58: bad substitution 显然,shell脚本中存在bash特定代码,并且脚本是源代码,因为它在调用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本地(非导出)变量,别名或函数. set -a指示bash默认导出所有变量,从而确保源源脚本设置的变量尽可能放在环境中而不是保持shell-local.这不适用于无法导出的类型的值(例如数组),但这是一个合理的临时措施. 顺便说一下 – 有一个upstream ticket要求这个代码与/ bin / sh兼容.如果发生这种情况,zsh将能够在POSIX兼容模式下解释它,您可以暂时输入,如下所示: emulate sh -c 'source shell mingw64' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |