![光盘在 bash 中导致 cd 到不同的目录?](https://linux22.com/image/1451994/%E5%85%89%E7%9B%98%E5%9C%A8%20bash%20%E4%B8%AD%E5%AF%BC%E8%87%B4%20cd%20%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
好吧,我已经使用 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 会查看是否存在与您输入的名称相似的目录。(它假设您犯了拼写错误。)如果它找到与您输入的内容相似的内容,它会假设这就是您的意思,而且它非常不加区分 — 如果有多个名称与您输入的内容相似(例如,cab
、cad
、can
、cap
和car
)cat
,它会随机选择一个。
或者,也许它是目录中最先出现的那个(可能是最古老的那个)。