如果给定不完整的目录名称,cd自动选择是否是标准行为?


17

我有三个文件夹ProjectA,分别为ProjectBProjectC。当我tab-complete cdcd Project并按Enter,它选择ProjectC。我发现其他类似情况也是如此。它默认为按字典顺序排列的最后一个(但这也可能是最近更改/添加的)。

这是预期的默认行为cd,还是我在这里意外设置了某些内容?

我正在使用bash 4.3运行OSX 10.10.3。

Answers:


18

我没有遇到这种行为。但是我能够复制它。也许您不小心更改了该选项cdspell。请参阅《Bash参考手册》

cdspell

如果设置,将更正cd命令中目录组件的拼写错误。检查的错误是转置字符,丢失的字符和太多的字符。如果找到更正,则打印更正的路径,然后继续执行命令。此选项仅由交互式外壳程序使用。

我试过了,它总是可以纠正指定给的参数中的路径cd。如果有多个可能性,例如您的文件夹中ProjectAProjectB并且ProjectC,它默认为一个是最后的目录顺序。您可以通过进行检查ls -U。参见示例:

user@host:~$ ls -Ul
total 0
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectA
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectB
drwxr-xr-x 2 root root 40 May 26 08:11 ProjectC
user@host:~$ cd Project<tab><tab>
ProjectA/ ProjectB/ ProjectC/
user@host:~$ cd Project
ProjectC
user@host:~/ProjectC$

要禁用该行为,请使用:

shopt -u cdspell

有趣,但是为什么要选择目录顺序中最后一个?这似乎没有记录。
Faheem Mitha 2015年

我找不到它的来源。在bash的源代码中,有一个名为的函数spname,它确实返回正确拼写的文件名。它的灵感来自the code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
混乱

听起来像是文档错误。您可能应该将其报告给bash。如果这样做,您可以在答案中包含指向该错误的链接。
Faheem Mitha 2015年

@chaos啊,是的,我知道我已经shopt -s cdspell设置好了.bashrc(我做了很多复制粘贴操作,使osx / linux相互兼容.bashrc,显然应该引起更多关注)。我实际上很喜欢,只是无法找到原因。谢谢!
罗布·霍尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.