参见英文答案 > Why not use “which”? What to use then?????????????????????????????????????4个
观察:
我有一个名为foo的可执行文件,位于/ b / foo中.它是针对动态库的旧标头编译的,导致它在执行时出现段错误:
$foo
Segmentation fault. // Expected behaviour.
现在,我针对应该执行得很好的新动态库编译新版本的foo到/ a / foo.目录a /在b /之前的$PATH中,所以应选择/ a / foo:
$which foo
/a/foo
当我执行foo时,会发生以下情况:
$foo
Segmentation fault.
因此,似乎/ b / foo被执行,而“which”告诉我应该执行/ a / foo.
为了让事情变得更奇怪,当我运行完整路径$(/ a / foo)时,运行正常:
$/a/foo
OK!
$cp /a/foo .
$./foo
OK!
更进一步,如果我现在删除/ a / foo:
$rm /a/foo
然后肯定会选择/ b / foo,对吧?
$which foo
/b/foo
$foo
bash: /a/foo: No such file or directory
$$(which foo)
Segmentation fault. // Expected result.
不!
固定:
源.bash_profile和.bashrc,问题消失了.
重现:
每次.只需删除/ a / foo,source~ / .bash_profile,create / a / foo,然后重新发生上述观察.
题:
有谁知道这里出了什么问题?
假设:
“哪个”是最新的,但系统根据“以前是什么情况”选择.
在上面的例子中,当打开终端时,/ a / foo还没有存在:我刚刚创建了它.因此,当/ a / foo创建时,“which”检测到/ a / foo,但系统仍然选择/ b / foo,因为它在某种程度上不同步?
但为什么系统不同步?