光盘在 bash 中导致 cd 到不同的目录?

光盘在 bash 中导致 cd 到不同的目录?

好吧,我已经使用 Linux 18 年了,从未见过或听说过这样的事情:

starting-forth$ ls
ch01/  ch02/  ch04/  ch05/  ch06/  text/
starting-forth$ cd ch07  # A directory I thought I might exist, but didn't
ch04
ch04$

什么?!好吧,只是为了确认一下:

ch04$ pwd
/home/m/learn/forth/starting-forth/ch04

我的 shell 是 bash,在 Manjaro Linux 上的虚拟终端(确切地说是 LilyTerm)中,在 XFCE 会话中。我不思考我做了一些奇怪的定制,整个系统都相当新(2014 年 10 月在新笔记本电脑上首次安装)。

那么,有人知道这是什么原因造成的吗?

更新:我之前没有想到的一个事实(虽然我不知道这有什么关系)是,这是在 Git 工作目录中发生的。

更新 2:显然,只要存在一个现有目录,其名称与我尝试 cd 到的不存在目录相同(最后一个字符除外,或两个字符?),就会发生这种情况。例如:

[tmp]$ mkdir dxx17903
[tmp]$ cd dxx17907
dxx17903
[tmp]$ cd dxx179035
dxx17903
[dxx17903]$ cd ..
[tmp]$ cd dxx179005
bash: cd: dxx179005: No such file or directory
[tmp]$ cd dxx179
bash: cd: dxx179: No such file or directory
[tmp]$ cd dxx1790
dxx17903
[dxx17903]$ cd ..
[tmp]$ mkdir foot
[tmp]$ mkdir food
[tmp]$ cd fool
foot
[foot]$ cd ..
[tmp]$ cd football
bash: cd: football: No such file or directory
[tmp]$ cd foo
foot
[foot]$

等等......看来,当有多个目录“匹配”(以这种奇怪和不受欢迎的方式)时,您去的目录是第一个创建的目录。

答案1

查看

shopt cdspell

如果设置了此选项,而您又cd进入了一个不存在的目录,shell 会查看是否存在与您输入的名称相似的目录。(它假设您犯了拼写错误。)如果它找到与您输入的内容相似的内容,它会假设这就是您的意思,而且它非常不加区分 — 如果有多个名称与您输入的内容相似(例如,cabcadcancapcarcat,它会随机选择一个。

或者,也许它是目录中最先出现的那个(可能是最古老的那个)。

相关内容