通过使用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上重现了这一点(不确定它是否重要,但我提到了它)。
答案 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
选项),type
或whence
。请参阅前两个的POSIX,或后者的shell手册。 (Bash不支持从哪里来,但大多数其他ksh衍生产品都支持它,虽然不一致。它通常具有最多的功能)。
答案 1 :(得分:3)
在ZSH中,which
相当于whence -c
(显示函数的定义),而不是whence -p
(它告诉可执行路径)。如果要更改它,请创建别名。