Czy to standardowe zachowanie, że cd wybiera automatycznie, gdy otrzyma niekompletną nazwę katalogu?


17

Mam trzy foldery o nazwie ProjectA, ProjectBi ProjectC. Kiedy tab-Complete cddo cd Projecti naciśnij przycisk Enter, to zdecyduje ProjectC. Odkryłem, że dotyczy to również innych podobnych przypadków; domyślnie jest ustawiony na ostatni w kolejności leksykograficznej (ale można to również ostatnio zmienić / dodać).

Czy jest to oczekiwane domyślne zachowanie cd, czy też ustawiłem tu coś przez przypadek?

Używam OSX 10.10.3, z bash 4.3.

Odpowiedzi:


18

Nie spotykam tego zachowania. Ale udało mi się to odtworzyć. Może przypadkowo zmieniłeś opcję cdspell. Zobacz Podręcznik referencyjny Bash :

cdspell

Jeśli jest ustawiony, drobne błędy w pisowni komponentu katalogu w poleceniu cd zostaną poprawione. Sprawdzane błędy to transponowane znaki, brakujący znak i znak za dużo. Jeśli znaleziono korektę, drukowana jest poprawiona ścieżka i polecenie jest kontynuowane. Ta opcja jest używana tylko przez interaktywne powłoki.

Próbowałem i zawsze poprawia ścieżkę w podanym argumencie cd. Jeśli istnieje wiele możliwości, takich jak w folderze z ProjectA, ProjectBi ProjectC, domyślnie jest to ta, która jest ostatnia w kolejności katalogów. Możesz to sprawdzić przez ls -U. Zobacz przykład:

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$

Aby wyłączyć to zachowanie, użyj:

shopt -u cdspell

Ciekawe, ale dlaczego wybiera ten ostatni w kolejności katalogów? Nie wydaje się to udokumentowane.
Faheem Mitha

Nie mogę znaleźć źródła tego. W kodzie źródłowym bash znajduje się funkcja spname, która zwraca poprawną pisownię nazwy pliku. Inspirowany jestthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
chaosem

Brzmi jak błąd w dokumentacji. Prawdopodobnie powinieneś zgłosić to bashowi. Jeśli tak, możesz dołączyć link do błędu w swojej odpowiedzi.
Faheem Mitha

@chaos Ach tak, widzę, że shopt -s cdspellustawiłem w swoim .bashrc(zrobiłem dużo kopiowania i wklejania, czyniąc kompatybilny z osx / linux cross .bashrci powinienem oczywiście zwrócić większą uwagę). Właściwie to mi się podoba, po prostu nie mogłem znaleźć wyszukiwarki, która wyjaśnia dlaczego. Dzięki!
Rob Holt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.