Saya telah menghabiskan banyak waktu di shell akhir-akhir ini dan saya bertanya-tanya bagaimana cara kerja tab autocomplete. Apa mekanisme dibaliknya? Bagaimana bash mengetahui konten setiap direktori?
bash
shell
autocomplete
CamelBlues
sumber
sumber
/etc/bash_completion
(setidaknya, di situlah banyak keajaiban Debian).Jawaban:
Ada dua bagian pelengkapan otomatis:
Pustaka garis baca, seperti yang telah disebutkan oleh fixje, mengelola pengeditan baris perintah, dan memanggil kembali ke bash saat tab ditekan, untuk mengaktifkan penyelesaian. Bash kemudian memberikan (lihat poin selanjutnya) daftar penyelesaian yang mungkin, dan baris baca menyisipkan sebanyak mungkin karakter yang diidentifikasi secara jelas oleh karakter yang sudah diketik. (Anda dapat mengkonfigurasi pustaka readline cukup banyak, lihat bagian Pengeditan baris perintah dari Bash manual untuk detailnya.)
Bash sendiri memiliki built-in
complete
untuk menentukan mekanisme penyelesaian untuk perintah individual. Jika untuk perintah saat ini tidak ada yang didefinisikan, maka digunakan penyelesaian berdasarkan nama file (menggunakan opendir / readdir, seperti kata Ignacio).Bagian untuk menentukan penyelesaian Anda sendiri dijelaskan di bagian Penyelesaian yang Dapat Diprogram . Singkatnya, dengan
complete «options» «command»
Anda menentukan penyelesaian untuk beberapa perintah. Misalnyacomplete -u su
, ketika menyelesaikan argumen untuksu
perintah, cari pengguna sistem saat ini .Jika ini lebih rumit daripada yang dapat dicakup opsi normal (mis. Penyelesaian yang berbeda bergantung pada indeks argumen, atau bergantung pada argumen sebelumnya), Anda dapat menggunakan
-F function
, yang kemudian akan memanggil fungsi shell untuk menghasilkan daftar kemungkinan penyelesaian. (Ini digunakan misalnya untuk penyelesaian git, yang sangat rumit, bergantung pada subperintah dan terkadang pada opsi yang diberikan, dan terkadang menggunakan nama cabang (yang tidak diketahui oleh bash).Anda dapat membuat daftar penyelesaian yang ada yang ditentukan dalam lingkungan bash Anda saat ini dengan sederhana
complete
, untuk mendapatkan kesan tentang apa yang mungkin. Jika Anda memiliki paket penyelesaian bash (atau bagaimanapun namanya pada sistem Anda), penyelesaian untuk banyak perintah diinstal, dan seperti yang dikatakan Wrikken,/etc/bash_completion
berisi skrip bash yang kemudian sering dieksekusi pada startup shell untuk mengonfigurasi ini. Skrip penyelesaian kustom tambahan dapat ditempatkan di/etc/bash_completion.d
; itu semua bersumber dari/etc/bash_completion
.sumber
Jika Anda tertarik dengan dasar-dasarnya: Bash menggunakan garis baca yang menampilkan riwayat dan penyelesaian dasar. Anda dapat memeriksa sumbernya jika ingin mendapatkan pemahaman yang mendetail. Selanjutnya, Anda dapat menggunakan readline untuk membangun antarmuka CLI Anda sendiri dengan penyelesaian
sumber