Это стандартное поведение для автоматического выбора компакт-диска, когда ему дается неполное имя каталога?

17

У меня есть три папки , названные ProjectA, ProjectBи ProjectC. Когда я tab-полный cdк cd Projectи нажмите Enter, он выбирает ProjectC. Я обнаружил, что это также относится и к другим подобным случаям; по умолчанию последний в лексикографическом порядке (но это также может быть последнее изменение / добавление).

Это ожидаемое поведение по умолчанию для cd, или я установил что-то здесь случайно?

Я использую OSX 10.10.3, с bash 4.3.

Роб Холт
источник

Ответы:

18

Я не сталкиваюсь с таким поведением. Но я смог воспроизвести это. Может быть, вы случайно изменили вариант cdspell. См. Справочное руководство Bash :

cdspell

Если установлено, незначительные ошибки в написании компонента каталога в команде cd будут исправлены. Проверяются ошибки: транспонированные символы, отсутствующий символ и слишком много символов. Если исправление найдено, исправленный путь печатается, и команда продолжается. Эта опция используется только интерактивными оболочками.

Я попробовал это, и он всегда исправляет путь в аргументе cd. Если есть несколько возможностей, например, в вашей папке с ProjectA, ProjectBи 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
хаос
источник
Интересно, но почему он выбирает тот, который является последним в порядке каталога? Это не представляется документально подтвержденным.
Фахим Митха
Я не могу найти источник для этого. В исходном коде bash есть функция spname, которая возвращает правильно написанное имя файла. Это вдохновленоthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
хаос
Похоже, ошибка документации. Вы, вероятно, должны сообщить об этом bash. Если вы это сделаете, вы можете включить ссылку на ошибку в своем ответе.
Фахим Митха
@chaos Ах, да, я вижу, что shopt -s cdspellустановил в своем .bashrc(я сделал много копий и вставок, делая совместимость с osx / linux совместимой, .bashrcи, очевидно, следовало уделять больше внимания). Мне на самом деле это нравится, я просто не могу найти результаты поиска, почему. Благодарность!
Роб Холт