Tôi nghĩ rằng tôi cũng sẽ thêm lời giải thích bổ sung sau đây cho sự thất bại của việc hoàn thành bash - quá dài cho một nhận xét và có thể hữu ích cho ai đó có vấn đề với việc hoàn thành bash, vì có lẽ đây là câu hỏi kinh điển 'chung' tất cả các bản sao được giới thiệu.
Ngay cả khi bạn có dòng thích hợp trong .bashrc(như trong câu trả lời ở trên) và bash-completiongói được cài đặt, việc hoàn thành bash vẫn có thể gặp trục trặc nếu bạn có shopt -s nullglobhoặc shopt -s failglobtrong .bashrchoặc .bash_aliases.
Các kịch bản sau đây đã được thử nghiệm với tất cả các tùy chỉnh của người dùng .bashrcvà được .bash_aliasesgỡ bỏ để đưa ra một thử nghiệm công bằng, với dòng hoàn thành bash thích hợp .bashrchiện tại và bash-completionđược cài đặt.
1) Kịch bản đầu tiên là khi bạn có shopt -s failglobtrong .bashrchoặc .bash_aliases.
Khi cố gắng hoàn thành các thư mục và tệp tương ứng, các lỗi này sẽ xảy ra:
cd Dbash: no match: "${COMP_WORDS[@]}"
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}
Tuy nhiên, các lệnh vẫn sẽ hoàn thành thành công.
2) Khi shopt -s nullglobđược bật, cố gắng hoàn thành tab một thư mục hoặc tệp sẽ dẫn đến mọi thứ được liệt kê mà không hoàn thành:
cd Do
.adobe/ .gimp-2.6/ Podcasts/
.aptitude/ .gnome2/ Public/
.audacity-data/ .gnome2_private/ .pulse/
............
Tôi đã cắt ngắn danh sách ở đây, vì nó rất dài và không cần thiết phải sao chép tất cả.
Một lần nữa, hoàn thành lệnh sẽ vẫn hoạt động.
Vì vậy, chỉ cần loại bỏ shopt -s failglobhoặc shopt -s nullglobcũng có thể giải quyết vấn đề lỗi khi hoàn thành bash, giả sử rằng bạn có dòng thích hợp trong .bashrcvà bash-completionđược cài đặt.