如何阻止Linux中止PATH搜索?

Cli*_*ive 1 linux bash path search-path

我的PATH中有/ usr/bin,后来在PATH中有点(表示当前目录).我在两个目录中有一个程序'abcxyz',/ var和/ someother.如果我在/ var中使用mate-terminal并键入一些荒谬的名字,dgxuznk,那么bash会说:"bash:dgxuznk:command not found"如你所料.如果我现在在/ usr/bin中创建一个名为dgxuznk的链接指向/ someother中的程序,它也会运行程序,也就像你期望的那样.但是,如果我现在删除该链接,它不再说"命令未找到",而是"bash:/ usr/bin/dgxuznk:没有这样的文件或目录".就好像它记得它之前发现它的位置,并期望再次在/ usr/bin下找到它.

更糟糕的是,如果我现在将/ var(我在哪里)中的程序重命名为dgxuznk,并键入"dgxuznk",它仍然会抱怨"bash:/ usr/bin/dgxuznk:没有这样的文件或目录"就像它可以'通过PATH中的/ usr/bin查看点并查看当前目录以查找程序.

这只是在Fedora 19中吗?如何编程以通过搜索路径中的/ usr/bin并找到当前目录点?

(提示:如果要重现此错误 - 请不要让它在当前目录中找到该程序,直到它在/ usr/bin中找到它为止.)

che*_*ner 6

bash维护内存中的哈希,找到程序的位置,这样每次运行命令时都不必经过完整的路径查找.每个bash会话都维护自己的哈希值,但您可以使用内置hash命令对其进行操作.要查看哈希中的内容,只需运行它不带参数.要清除它,请使用hash -r.在你的情况,你只是想删除dgxuznkhash -d gdxuznk.

(您可能会问为什么bash不会在找不到位置时从哈希中删除条目.可能有充分的理由报告错误而不是回退到路径查找,或者它可能是错误或区域改进.)