Làm thế nào để các công cụ dòng lệnh có danh sách tự động hoàn thành của riêng họ?


24

Làm thế nào để Bash trong Ubuntu biết danh sách hành động cụ thể của một công cụ?

Ví dụ: nếu tôi gõ apt-get và tab hai lần, tôi chỉ thấy loại bỏ, cập nhật, nâng cấp ... vv, nhưng không phải là hành động cho một lệnh khác hoặc các tệp trong thư mục hiện tại.

Tôi đang phát triển một công cụ dòng lệnh trong Go và muốn cung cấp tính năng này cho các bản phân phối hỗ trợ nó.


1
Tôi đã xóa "ubfox" khỏi tiêu đề và thẻ của bạn vì câu hỏi này tốt hơn vì câu hỏi chung chung hơn (câu trả lời không dành riêng cho bất kỳ bản phân phối nào).
goldilocks

1
Câu hỏi tuyệt vời, tôi thường tự hỏi điều này, nhưng không bao giờ dành thời gian để tìm kiếm nó.
akatakritos

Câu trả lời:


25

Nó thực hiện điều này bằng cách sử dụng các tính năng hoàn thành của bash v4. Mã hoàn thành apt-getđược cung cấp bởi bash-completiongói và được đặt tại /usr/share/bash-completion/completions/apt-get. Các ứng dụng đã hoàn thành và không phải là một phần của bash-completiongói cơ sở đặt các tập lệnh hoàn thành của chúng vào /etc/bash_completion.d.

Các hoàn thành được tải thông qua tìm nguồn cung ứng /etc/bash_completion. Chính xác thì việc này được thực hiện sẽ khác nhau tùy thuộc vào phiên bản Debian hoặc Ubuntu. Điều đó lần lượt sẽ nguồn mọi thứ trong /usr/share/bash-completion/completions/etc/bash_completion.d.


Cảm ơn, điều đó giải thích nó. Vì vậy, việc triển khai không chỉ thay đổi từ Debian sang Ubuntu, mà còn ở mỗi phiên bản của cùng một bản phân phối?
Amged Rustom

1
@Amgad Nó hoạt động theo cùng một cách trên tất cả các bản phân phối. Sự khác biệt duy nhất là vị trí của các tệp và có lẽ một số cài đặt mặc định.
Gilles 'SO- ngừng trở nên xấu xa'
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.