Đây có phải là hành vi tiêu chuẩn để cd tự động chọn khi được cung cấp tên thư mục không đầy đủ không?


17

Tôi có ba thư mục được gọi ProjectA, ProjectBProjectC. Khi tôi tabhoàn cdthành cd Projectvà nhấn Enter, nó sẽ chọn ProjectC. Tôi đã tìm thấy đây cũng là trường hợp với các trường hợp tương tự khác; nó mặc định là cuối cùng theo thứ tự từ điển (nhưng điều này cũng có thể được thay đổi / thêm gần đây nhất).

Đây có phải là hành vi mặc định dự kiến ​​cho cd, hoặc tôi đã đặt một cái gì đó một cách tình cờ ở đây?

Tôi đang chạy OSX 10.10.3, với bash 4.3.

Câu trả lời:


18

Tôi không gặp phải hành vi đó. Nhưng tôi đã có thể tái tạo nó. Có thể bạn vô tình thay đổi tùy chọn cdspell. Xem Hướng dẫn tham khảo Bash :

cdspell

Nếu được đặt, các lỗi nhỏ trong chính tả của thành phần thư mục trong lệnh cd sẽ được sửa. Các lỗi được kiểm tra là các ký tự được chuyển đổi, một ký tự bị thiếu và một ký tự quá nhiều. Nếu tìm thấy một hiệu chỉnh, đường dẫn đã sửa được in và lệnh sẽ tiếp tục. Tùy chọn này chỉ được sử dụng bởi các vỏ tương tác.

Tôi đã thử nó và nó luôn sửa đường dẫn trong đối số được đưa ra cd. Nếu có nhiều khả năng như trong thư mục của bạn với ProjectA, ProjectBProjectC, nó mặc định là khả năng cuối cùng trong thứ tự thư mục. Bạn có thể kiểm tra bằng cách ls -U. Xem ví dụ:

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$

Để vô hiệu hóa hành vi đó, hãy sử dụng:

shopt -u cdspell

Thú vị, nhưng tại sao nó lại chọn cái cuối cùng theo thứ tự thư mục? Điều này dường như không được ghi nhận.
Faheem Mitha

Tôi không thể tìm thấy một nguồn cho điều đó. Trong mã nguồn của bash có một hàm được gọi là spnametrả về tên tệp được viết đúng chính tả. Nó được lấy cảm hứng từthe code in "The UNIX * Programming Environment", Kernighan & Pike, Prentice-Hall 1984, pages 209 - 213.
sự hỗn loạn

Âm thanh như một lỗi tài liệu. Bạn có lẽ nên báo cáo nó cho bash. Nếu bạn làm như vậy, bạn có thể bao gồm một liên kết đến lỗi trong câu trả lời của bạn.
Faheem Mitha

@chaos Ah vâng, tôi thấy tôi đã shopt -s cdspellthiết lập trong tôi .bashrc(Tôi đã làm rất nhiều sao chép và dán làm một OSX / linux chéo tương thích .bashrcvà nên đã chú trọng hơn rõ ràng). Tôi thực sự thích nó, tôi không thể tìm kiếm tại sao. Cảm ơn!
Rob Holt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.