通过将 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 ~]$
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何“修复”它?
附注。我在 Arch Linux 上重现了这个(不确定它是否重要,但我提到了它)。
$ zsh -c 'type which'
which is a shell builtin
$ bash -c 'type which'
which is /usr/bin/which
Run Code Online (Sandbox Code Playgroud)
解决方案是不使用which(1),这是一个非标准且不是很有用的命令。由于替代方案指定不当且实施不一致,您应该使用什么的问题并不是最直接的,但它们比which.
根据您的要求,您想要command(请参阅-v选项)type、 或whence。对于前两者,请参见 POSIX,对于后者,请参见 shell 手册。(Bash 不支持 wherece,但大多数其他 ksh 衍生产品都支持它,尽管不一致。它通常具有最多的功能)。