2

通过使用 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 上重现了这个(不确定它是否重要,但我提到了它)。

4

2 回答 2

7
$ 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 不支持 wherece,但大多数其他 ksh 衍生产品都支持它,尽管不一致。它通常具有最多的功能)。

于 2013-01-07T12:43:40.033 回答
6

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

于 2013-01-07T12:43:17.437 回答