Est-ce un comportement standard que cd choisit automatiquement lorsqu'il reçoit un nom de répertoire incomplet?

17

J'ai trois dossiers appelés ProjectA, ProjectBet ProjectC. Quand je tabCOMPLETES cdà cd Projectet appuyez sur Enter, il choisit ProjectC. J'ai trouvé que c'est aussi le cas avec d'autres cas similaires; il est par défaut le dernier dans l'ordre lexicographique (mais cela peut également être modifié / ajouté le plus récemment).

Ce comportement par défaut est-il prévu cdou ai-je défini quelque chose par accident ici?

J'utilise OSX 10.10.3, avec bash 4.3.

Rob Holt
la source

Réponses:

18

Je ne rencontre pas ce comportement. Mais j'ai pu le reproduire. Vous avez peut-être accidentellement changé l'option cdspell. Voir le manuel de référence de Bash :

cdspell

S'il est défini, des erreurs mineures dans l'orthographe d'un composant de répertoire dans une commande cd seront corrigées. Les erreurs recherchées sont des caractères transposés, un caractère manquant et un caractère de trop. Si une correction est trouvée, le chemin corrigé est imprimé et la commande se poursuit. Cette option n'est utilisée que par les shells interactifs.

Je l'ai essayé et il corrige toujours le chemin dans l'argument donné à cd. S'il existe plusieurs possibilités comme dans votre dossier avec ProjectA, ProjectBet ProjectC, il s'agit par défaut de celui qui est le dernier dans l'ordre du répertoire. Vous pouvez le vérifier par ls -U. Voir l'exemple:

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$

Pour désactiver ce comportement, utilisez:

shopt -u cdspell
le chaos
la source
Intéressant, mais pourquoi choisit-il celui qui est le dernier dans l'ordre du répertoire? Cela ne semble pas être documenté.
Faheem Mitha
Je ne trouve pas de source pour ça. Dans le code source de bash, une fonction appelée spnamerenvoie le nom de fichier correctement orthographié. Il s'inspire duthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
chaos
Cela ressemble à un bogue de documentation. Vous devriez probablement le signaler à bash. Si vous le faites, vous pouvez inclure un lien vers le bug dans votre réponse.
Faheem Mitha
@chaos Ah oui, je vois que j'ai shopt -s cdspellmis dans mon .bashrc(j'ai fait beaucoup de copier-coller pour rendre un osx / linux compatible .bashrcet j'aurais dû faire plus attention évidemment). J'aime vraiment ça, je n'arrivais pas à trouver une recherche pour trouver pourquoi. Merci!
Rob Holt