Чи стандартна поведінка для CD автоматично обирати, коли йому надається неповне ім'я каталогу?


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

Цікаво, але чому він вибирає той, який останній в порядку каталогу? Схоже, це не підтверджено документально.
Faheem Mitha

Я не можу знайти джерело для цього. У вихідному коді bash є функція, яка називається spname, яка повертає правильно написане ім'я файлу. Він натхненнийthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
хаос

Звучить помилка документації. Вам, мабуть, слід повідомити про це в баш. Якщо це зробити, ви можете включити у свою відповідь посилання на помилку.
Faheem Mitha

@chaos Ага, так, я бачу, що я shopt -s cdspellвстановив своє .bashrc(я зробив багато копіювання та вставки, роблячи хрестик OSX / Linux сумісним .bashrcі, очевидно, слід було б звернути більше уваги). Мені це справді подобається, я просто не зміг знайти пошук, чому. Спасибі!
Роб Холт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.