通过与oh-my-zsh框架一起使用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上重现了这一点(不确定是否重要,但我提到了)。

最佳答案

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

关于linux - zsh和bash中哪个命令的不同行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14196061/

10-15 03:29