2013-01-07 46 views
0

命令通過與OH-MY-zsh的框架一起使用zsh的一段時間,我注意到,這命令的行爲在不同的zsh比在bash。不同的行爲,其中在的zsh和bash

我的意思:

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

爲什麼會出現這種情況,我怎麼可以「修復」嗎?

PS。我在Arch Linux上重現了這一點(不確定它是否重要,但我提到它)。

+0

http://stackoverflow.com/questions/7719757/zsh-which-rvm-or-which-gem-returns-the-function-contents-instead-of-the-path – cmh

回答

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手冊。 (擊不支持何處,但它是由大多數其他ksh的衍生物支持,儘管不一致,它典型地具有最功能)。

+0

的好可能的複製知道: zsh的文檔中的所有其他東西,包括'命令-v',被標記爲相當於'whence'(可能具有一些標誌):的'whence'具有最特徵的很好的例子。 – ZyX

3

在ZSH中,which相當於whence -c(顯示函數的定義),而不是whence -p(它告訴可執行路徑)。如果你想改變它,請製作一個別名。