zsh和bash中哪个命令的不同行为

时间:2013-01-07 12:34:09

标签: linux bash zsh

通过使用zsh和oh-my-zsh框架一段时间,我注意到哪个命令在zsh中的行为与在bash中的行为不同。

我的意思是:

# on zsh
ilias@ilias-pc ~  ➜ which ls
ls: aliased to ls --color=auto
ilias@ilias-pc ~  ➜ which which
which: shell built-in command
ilias@ilias-pc ~  ➜ bash
[ilias@ilias-pc ~]$ which ls
/usr/bin/ls
[ilias@ilias-pc ~]$ which which
/usr/bin/which
[ilias@ilias-pc ~]$ 

为什么会发生这种情况,我该如何解决问题?它?

PS。我在Arch Linux上重现了这一点(不确定它是否重要,但我提到了它)。

2 个答案:

答案 0 :(得分:4)

$ zsh -c 'type which'
which is a shell builtin
$ bash -c 'type which'
which is /usr/bin/which

解决方案是不使用which(1),这是一个非标准且不是非常有用的命令。由于替代方案指定不当且执行不一致,因此您应该使用的问题并不是最直接的问题,但它们优于which

根据您的要求,您需要command(请参阅-v选项),typewhence。请参阅前两个的POSIX,或后者的shell手册。 (Bash不支持从哪里来,但大多数其他ksh衍生产品都支持它,虽然不一致。它通常具有最多的功能)。

答案 1 :(得分:3)

在ZSH中,which相当于whence -c(显示函数的定义),而不是whence -p(它告诉可执行路径)。如果要更改它,请创建别名。