rt,我定义了两个宏:
```
export CC="powerpc-unknown-linux-gnuspe-gcc -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double"
export CC1="powerpc-unknown-linux-gnuspe-gcc"
```
然后调用 $CC1 test.c 编译在bash 和zsh 下都是ok的,但是 调用$CC 在bash 下是正常的,在zsh 下面就报错
```
zsh: command not found: powerpc-unknown-linux-gnuspe-gcc -m32 -mcpu=8548 -mabi=spe -mspe -mfloat-gprs=double
```
看起来zsh 是把宏里面的全部语句当成一条指令了,bash 则是简单的展开。
有没有解决办法呢?
ps:难怪android 要求编译时使用bash了,zsh 易用性可以,但是还有不少缺陷。
try alias
```
➜ ~ export CC="ifconfig en0"
➜ ~ $CC
zsh: command not found: ifconfig en0
➜ ~ alias CC="ifconfig en0"
➜ ~ CC
en0: flags=8863
mtu 1500
ether d0:e1:40:9a:63:3c
inet6 fe80::d2e1:40ff:fe9a:633c%en0 prefixlen 64 scopeid 0x4
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=1
media: autoselect
status: active
```
楼上正解 正确用法应该是alias而不是export,出了问题先从自己身上找原因。
尝试一下eval:
eval $CC test.c
忘了alias,不过这个宏定义是用在一个完整的工程里面的,改成alias之后,大量脚本要改
问题是为什么bash 可以而zsh 不行?要解决肯定有办法,alias 之后可以用在makefile、mk、脚本里面吗?
忘了eval 这个神器了。
现在的问题是,在zsh 下得用alias ,但是这样一来命令行的命令和makefile 这些的命令不一致了,如果按照zsh 的方法改了的话,大量脚本,只能呵呵了。
看来唯一的办法就是日常使用zsh 毕竟很方便,编译构建的时候还是乖乖的弄bash 得了,反正android 也推荐bash 来编译。
有些场景下必须得用 export,比如指定 EDITOR。
不同shell特性是不一样的!请在脚本开头加上
#!/bin/bash
这是最基本的了吧
无力了,makefile 里面可以加 吗?
对啊。
确实不一样, 用 zsh 编译android 源码总是稀奇古怪的问题, bash 一把过
如果我没记错的话,bash,zsh,tcsh,fish的语法是不兼容的,zsh可以支持兼容不过默认是关的,fish好像是没有兼容模式的
makefile你写export干啥…
环境变量。makefile 调用。你可以看看kernel、uboot 之类的makefile
然而我zsh编译内核从来没出现过问题…
我又没说zsh 不能编译,问题是你用的工具、依赖关系,环境变量咱俩一样吗?
zsh里有个选项 SH_WORD_SPLIT,通过 setopt shwordsplit 开启一下