Ist es Standard, dass CD automatisch auswählt, wenn ein unvollständiger Verzeichnisname angegeben wird?

17

Ich habe drei Ordner genannt ProjectA, ProjectBund ProjectC. Als ich tab-Complete cdzu cd Projectund drückt Enter, wählt es ProjectC. Ich habe festgestellt, dass dies auch bei anderen ähnlichen Fällen der Fall ist. Die Standardeinstellung ist die letzte in lexikografischer Reihenfolge (dies kann jedoch auch zuletzt geändert / hinzugefügt werden).

Ist dies das erwartete Standardverhalten für cd, oder habe ich hier versehentlich etwas eingestellt?

Ich verwende OSX 10.10.3 mit Bash 4.3.

Rob Holt
quelle

Antworten:

18

Ich begegne diesem Verhalten nicht. Aber ich konnte es reproduzieren. Vielleicht haben Sie die Option versehentlich geändert cdspell. Siehe das Bash-Referenzhandbuch :

cdspell

Wenn diese Option aktiviert ist, werden kleinere Rechtschreibfehler einer Verzeichniskomponente in einem CD-Befehl korrigiert. Bei den überprüften Fehlern handelt es sich um transponierte Zeichen, ein fehlendes Zeichen und ein zu viele Zeichen. Wenn eine Korrektur gefunden wird, wird der korrigierte Pfad gedruckt und der Befehl fortgesetzt. Diese Option wird nur von interaktiven Shells verwendet.

Ich habe es versucht und es korrigiert immer den Pfad in dem Argument, das an gegeben wurde cd. Wenn es mehrere Möglichkeiten , wie in Ihrem Ordner mit ProjectA, ProjectBund ProjectCes standardmäßig auf die eine , die die letzten in der Reihenfolge des Verzeichnisses ist. Sie können das überprüfen, indem Sie ls -U. Siehe das Beispiel:

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$

Um dieses Verhalten zu deaktivieren, verwenden Sie:

shopt -u cdspell
Chaos
quelle
Interessant, aber warum wählt es das, das in Verzeichnisreihenfolge zuletzt ist? Dies scheint nicht dokumentiert zu sein.
Faheem Mitha
Ich kann keine Quelle dafür finden. Im Quellcode von bash gibt es eine Funktion spname, die den richtig geschriebenen Dateinamen zurückgibt. Es ist inspiriert vonthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
Chaos
Klingt nach einem Dokumentationsfehler. Du solltest es wahrscheinlich der Bash melden. Wenn Sie dies tun, können Sie Ihrer Antwort einen Link zu dem Fehler hinzufügen.
Faheem Mitha
@chaos Ah ja, ich sehe, ich habe shopt -s cdspellin meinem gesetzt .bashrc(ich habe viel kopiert und eingefügt, um ein OSX / Linux-Kreuz kompatibel zu machen .bashrcund sollte offensichtlich mehr Aufmerksamkeit geschenkt haben). Eigentlich mag ich es, ich konnte einfach keine Suche nach dem Grund finden. Vielen Dank!
Rob Holt