Apakah itu perilaku standar untuk cd untuk secara otomatis memilih ketika diberi nama direktori yang tidak lengkap?

17

Saya memiliki tiga folder bernama ProjectA, ProjectBdan ProjectC. Ketika saya tab-Lengkap cduntuk cd Projectdan tekan Enter, ia memilih ProjectC. Saya menemukan ini juga kasus dengan kasus serupa lainnya; standarnya adalah yang terakhir dalam urutan leksikografis (tetapi ini mungkin juga paling baru diubah / ditambahkan).

Apakah ini perilaku default yang diharapkan untuk cd, atau apakah saya menetapkan sesuatu secara tidak sengaja di sini?

Saya menjalankan OSX 10.10.3, dengan bash 4.3.

Rob Holt
sumber

Jawaban:

18

Saya tidak menemukan perilaku itu. Tapi saya bisa mereproduksinya. Mungkin Anda tidak sengaja mengubah opsi cdspell. Lihat Manual Referensi Bash :

cdspell

Jika diatur, kesalahan kecil dalam pengejaan komponen direktori dalam perintah cd akan diperbaiki. Kesalahan yang diperiksa adalah karakter yang dipindahkan, karakter yang hilang, dan karakter yang terlalu banyak. Jika koreksi ditemukan, jalur yang diperbaiki dicetak, dan perintah dilanjutkan. Opsi ini hanya digunakan oleh shell interaktif.

Saya mencobanya dan selalu memperbaiki jalan dalam argumen yang diberikan cd. Jika ada beberapa kemungkinan seperti pada folder Anda dengan ProjectA, ProjectBdan ProjectC, defaultnya adalah yang terakhir dalam urutan direktori. Anda dapat memeriksanya dengan ls -U. Lihat contohnya:

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$

Untuk menonaktifkan perilaku itu gunakan:

shopt -u cdspell
kekacauan
sumber
Menarik, tetapi mengapa ia memilih yang terakhir dalam urutan direktori? Tampaknya ini tidak didokumentasikan.
Faheem Mitha
Saya tidak dapat menemukan sumber untuk itu. Dalam kode sumber bash ada fungsi yang disebut spnameyang mengembalikan nama file yang dieja dengan benar. Terinspirasi olehthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
chaos
Kedengarannya seperti bug dokumentasi. Anda mungkin harus melaporkannya ke bash. Jika ya, Anda dapat menyertakan tautan ke bug dalam jawaban Anda.
Faheem Mitha
@chaos Ah ya, saya melihat saya telah shopt -s cdspellmengatur di saya .bashrc(saya melakukan banyak copy-and-paste membuat osx / linux cross kompatibel .bashrcdan seharusnya lebih memperhatikan jelas). Saya benar-benar menyukainya, saya tidak bisa menemukan apa yang ditemukan. Terima kasih!
Rob Holt