加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

有没有办法在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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读