Penyelesaian tab bash khusus


34

Saya memiliki utilitas konsol khusus saya cooltooldengan daftar opsi

fooOption
barOption

Apa yang harus saya lakukan untuk mem-bash autocomplete opsi dengan menekan tabtombol?

Maksud saya pengguna mengetik

$ ./cooltool foo_

lalu ditekan tab. Lalu

$ ./cooltool fooOption _

muncul.


1
Jangan posting silang.
Wuffers

2
Perhatikan bahwa yang ini dimigrasi dan yang lain tidak. Saya pikir banyak pengguna masih tidak menyadari bahwa mereka seharusnya tidak memposting pertanyaan di beberapa situs SE. Mereka digunakan untuk membedakan forum yang bukan sistem terpadu, di mana Anda dapat bertanya di beberapa forum yang berbeda untuk peluang jawaban cepat yang lebih baik.
jcrawfordor

Jawaban:


2

Tulis skrip penyelesaian bash untuk cooltool. Paket bash-completion dilengkapi dengan skrip untuk banyak program populer, yang dapat Anda gunakan sebagai contoh.


40

Cara paling sederhana adalah menambahkan berikut ini ke .bashrc Anda.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Setiap kali Anda mengetik cooltool f[TAB][TAB], _cooltool()fungsi dipanggil. Ini akan mengetahui apa kata parsial Anda saat ini dan kemudian compgenakan menentukan opsi mana yang cocok. Ini disimpan dalam array yang disebut COMPREPLYyang kemudian ditampilkan. Lihat man completedan man compgenuntuk detailnya.

Untuk tutorial yang bagus, lihat: Menulis Fungsi Penyelesaian Bash Anda sendiri


7

Anda mungkin ingin melihat lebih dekat di dalam direktori /etc/bash_completion.d di sistem Anda.

Anda juga harus membaca pengantar ini . Bagian kedua dari pendahuluan adalah yang Anda butuhkan.


1
Saya menggunakan Mac OS X 10.6, jadi tidak ada direktori

Ah, bagus untuk tahu.


2

Selain jawaban dogbane, Anda juga bisa melakukan:

complete -W "fooOption barOption" cooltool

jika Anda hanya ingin mencocokkan daftar kata dari awal string. Tampaknya sebagian besar opsi lengkap dan kompen. Saya hanya memperhatikan "permulaan string" yang cocok dengan perintah yang saya gunakan, jadi saya merasa rapi bahwa Anda dapat melakukan hal-hal lain dalam fungsi _cooltool seperti:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

untuk mencocokkan di mana saja dalam nama opsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.