Bagaimana alat baris perintah memiliki daftar autocomplete sendiri?

24

Bagaimana Bash di Ubuntu mengetahui daftar tindakan khusus alat?

Sebagai contoh jika saya mengetikkan apt-get dan tab dua kali saya hanya melihat hapus, perbarui, perbarui ... dll, tetapi bukan tindakan untuk perintah lain atau file dalam direktori saat ini.

Saya sedang mengembangkan alat baris perintah di Go dan ingin menyediakan fitur ini untuk distro yang mendukungnya.

Diubah Rustom
sumber
1
Saya menghapus "ubuntu" dari judul dan tag Anda karena ini lebih baik sebagai pertanyaan yang lebih umum (jawabannya tidak spesifik untuk distro apa pun).
goldilocks
1
Pertanyaan yang bagus, saya sering bertanya-tanya tentang hal ini, tetapi tidak pernah meluangkan waktu untuk mencarinya.
akatakritos

Jawaban:

25

Ini dilakukan dengan menggunakan fitur penyelesaian bash v4. Kode penyelesaian untuk apt-getdisediakan oleh bash-completionpaket dan terletak di /usr/share/bash-completion/completions/apt-get. Aplikasi yang memiliki penyelesaian dan bukan bagian dari bash-completionpaket dasar menempatkan skrip penyelesaiannya /etc/bash_completion.d.

Penyelesaian dimuat melalui sumber /etc/bash_completion. Tepat di mana ini dilakukan akan bervariasi tergantung pada versi Debian atau Ubuntu. Itu pada gilirannya akan sumber segala sesuatu di /usr/share/bash-completion/completionsdan /etc/bash_completion.d.

jordanm
sumber
Terima kasih, itu menjelaskannya. Jadi implementasinya tidak hanya bervariasi dari Debian ke Ubuntu, tetapi juga di setiap versi dari distribusi yang sama?
Amged Rustom
1
@ Amgad Ini bekerja dengan cara yang sama di semua distribusi. Satu-satunya perbedaan adalah di mana file berada, dan mungkin beberapa pengaturan default.
Gilles 'SANGAT berhenti menjadi jahat'