我使用 zsh,并且非常喜欢它,但我经常使用 Android 源代码,因为其中包含需要正确评估 bash 的编译脚本。这些脚本需要在编译之前获取,并定义编译期间使用的环境变量和 shell 函数。
Zsh 无法获取这些文件,如果我尝试发出,emulate bash
我的 shell 就会变得无法运行,每次我遇到空格时都会出现大量这些错误(我正在使用 oh-my-zsh,也许这是一个原因?):
url-quote-magic:24: bad pattern: ( ):/(|/localhost)/*
有没有办法让我不切换到 bash 来评估这些文件,或者调用 bash 实例并将它在采购期间定义的新环境变量/函数导入到我的 zsh 会话中?还是每次我需要在 Android 上工作时,我都注定要切换到 bash?
编辑:找到了我自己的问题的答案。使用另一个 shell 获取文件似乎是不可能的,但在 Android 宏文件失败的情况下,此页面提供了修复:
http://nilvec.com/building-cyanogen-from-source/
基本上,只需设置一下unsetopt nomatch
就可以让 zsh 停止抱怨通配符不匹配,这足以完成脚本。仍然会有一个错误,关于使用complete
bash 内部命令为一个 Android 宏添加完成功能,但这绝对不是关键。
答案1
您可以将编译命令行放在 bash 脚本中,该脚本在执行编译命令之前获取编译脚本。
就像是
#!/bin/bash
. /path/to/environmentscript
. /path/to/morefunctionsscript
compile_command
然后,您无需手动调用compile_command
,只需调用新的 bash 脚本。