我习惯于打字ls Doc
,然后按几次制表键来完成ls Documents/
。
ls Documents
但是,现在我的 ls 正在用 Documents 末尾的空格完成相同的语句,因此我可以使用它来查找文件树。
今天开始发生这种情况。你知道原因吗?更重要的是,怎么修?
编辑
任何目录和所有目录都会发生这种情况。Documents 就是一个例子。$CDPATH
为空。
complete | grep ls
返回complete -o default -F _longopt ls
唯一相关的答案。
locate Documents
在 /usr/lib/ 中出现内容
答案1
有几件事可能会发生。
1)complete | grep ls
看看 ls 是否有任何特殊的补全。可能有一些代码改变了你期望补全做的事情
2) doecho $CDPATH
此变量是 bash 将在本地目录之外查找的特殊目录列表cd
。我不确定 ls 是否使用它,但值得一试。
您还可以尝试locate Documents
查看是否找到它可能试图引用的目录。
编辑
看起来您正在使用 bash_completion 包。当您要求完成时,它会尝试运行函数 _longopt。尝试complete -f ls
看看ls
现在的行为是否符合您的预期。
答案2
根据您的描述,唯一有意义的情况是,过去某个时间 Documents 是一个指向某个目录的符号链接,而今天 Documents 仍然是一个符号链接,但指向以下之一:
- 不是目录的东西。
- 不再存在的事物。
- 您无法充分访问某些内容来确定它是否是目录。