同一文件存于两路径时的$PATH导出行为异常问题
问题原因解析
这是因为bash有个命令哈希缓存机制,目的是加快命令查找速度——它会把你第一次执行某个命令时找到的路径存在缓存里,之后再执行这个命令就直接用缓存里的路径,不用再从头到尾遍历$PATH了。
你第一次执行aaa时,bash遍历$PATH找到了/home/john/testpath1/aaa,就把这个路径存进了缓存。后来你删掉testpath1里的aaa,bash还是直接去缓存的路径找,自然就提示文件不存在。
当你把testpath1从$PATH里移除后,bash发现缓存里的路径对应的目录不在$PATH里了,就会清空这条缓存记录,重新遍历剩下的$PATH路径,这时候就找到了testpath2里的aaa。
如果不想等缓存自动失效,你可以手动用hash -d aaa删除单个命令的缓存,或者用hash -r清空所有命令的缓存,这样bash就会重新遍历$PATH查找命令。
内容的提问来源于stack exchange,提问作者john smith
相关产品推荐
相关产品推荐

