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-completion
gó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 nullglob
hoặc shopt -s failglob
trong .bashrc
hoặ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 .bashrc
và được .bash_aliases
gỡ 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 .bashrc
hiệ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 failglob
trong .bashrc
hoặ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 failglob
hoặc shopt -s nullglob
cũ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 .bashrc
và bash-completion
được cài đặt.