让我们说,我有以下结构:
/usr/bin/app
/home/me/bin/app
$/usr/bin/app --version
- > v1
,$/home/me/bin/app --version
- > v2
。
所以,当我执行一些命令时,说$app --version
,它会返回v1
,但我的$which app
会给我/home/me/bin/app
,因此,我认为必须执行第二个应用程序,并返回v2
。为什么不发生?
换句话说,构造$app
是否等同于$$(which app)
,并且因此不适用?
答案 0 :(得分:5)
由于which
从linux hash table获取散列值,因此当您安装具有相同名称的新可执行文件时,shell仍会继续使用旧表,因此会带来冲突。我相信你也可以使用rehash命令,而不是使用hash -d <appname>
(有效)。 (你也应该使用zsh,非常酷:))