bash 和 zsh 在执行命令时有什么区别,同一个命令两个执行结果不同了

2015-08-04 11:16:07 +08:00
 oska874
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 易用性可以,但是还有不少缺陷。
5522 次点击
所在节点    Linux
14 条回复
chuhades
2015-08-04 12:14:11 +08:00
try alias
```
➜ ~ export CC="ifconfig en0"
➜ ~ $CC
zsh: command not found: ifconfig en0
➜ ~ alias CC="ifconfig en0"
➜ ~ CC
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> 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<PERFORMNUD>
media: autoselect
status: active
```
Jaylee
2015-08-04 12:20:08 +08:00
楼上正解 正确用法应该是alias而不是export,出了问题先从自己身上找原因。
extreme
2015-08-04 12:20:45 +08:00
尝试一下eval:
eval $CC test.c
oska874
2015-08-04 12:35:25 +08:00
@chuhades 忘了alias,不过这个宏定义是用在一个完整的工程里面的,改成alias之后,大量脚本要改
@Jaylee 问题是为什么bash 可以而zsh 不行?要解决肯定有办法,alias 之后可以用在makefile、mk、脚本里面吗?
@extreme 忘了eval 这个神器了。

现在的问题是,在zsh 下得用alias ,但是这样一来命令行的命令和makefile 这些的命令不一致了,如果按照zsh 的方法改了的话,大量脚本,只能呵呵了。

看来唯一的办法就是日常使用zsh 毕竟很方便,编译构建的时候还是乖乖的弄bash 得了,反正android 也推荐bash 来编译。
sinxccc
2015-08-04 12:37:53 +08:00
@Jaylee 有些场景下必须得用 export,比如指定 EDITOR。
bramblex
2015-08-04 12:45:10 +08:00
不同shell特性是不一样的!请在脚本开头加上

#!/bin/bash

这是最基本的了吧
oska874
2015-08-04 13:13:01 +08:00
@bramblex 无力了,makefile 里面可以加 #!/bin/sh 吗?
@sinxccc 对啊。
Panic
2015-08-04 13:22:45 +08:00
确实不一样, 用 zsh 编译android 源码总是稀奇古怪的问题, bash 一把过
EvilD
2015-08-04 14:12:36 +08:00
如果我没记错的话,bash,zsh,tcsh,fish的语法是不兼容的,zsh可以支持兼容不过默认是关的,fish好像是没有兼容模式的
bramblex
2015-08-04 21:00:26 +08:00
@oska874 makefile你写export干啥…
oska874
2015-08-04 23:03:04 +08:00
@bramblex 环境变量。makefile 调用。你可以看看kernel、uboot 之类的makefile
bramblex
2015-08-05 07:49:36 +08:00
@oska874 然而我zsh编译内核从来没出现过问题…
oska874
2015-08-05 09:12:01 +08:00
@bramblex 我又没说zsh 不能编译,问题是你用的工具、依赖关系,环境变量咱俩一样吗?
hongjiang
2015-08-06 21:15:29 +08:00
zsh里有个选项 SH_WORD_SPLIT,通过 setopt shwordsplit 开启一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/210642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX