Completamento della scheda bash personalizzata


34

Ho la mia utility console personalizzata cooltoolcon un elenco di opzioni

fooOption
barOption

Cosa devo fare per abilitare il completamento automatico delle opzioni premendo il tabtasto?

Intendo l'utente digitato

$ ./cooltool foo_

quindi premuto tab. E poi

$ ./cooltool fooOption _

apparso.


1
Non attraversare la posta.
Wuffers,

2
Si noti che questo è migrato e l'altro no. Penso che molti utenti ancora non si rendano conto che non dovrebbero pubblicare una domanda su più siti SE. Sono usati per disperdere forum che non sono un sistema unificato, dove potresti chiedere in alcuni forum diversi una migliore possibilità di una risposta veloce.
jcrawfordor,

Risposte:


2

Scrivi uno script di completamento bash per cooltool. Il pacchetto bash-completamento include script per molti programmi popolari, che puoi usare come esempi.


40

Il modo più semplice è aggiungere quanto segue al tuo .bashrc.

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

Ogni volta che si digita cooltool f[TAB][TAB], _cooltool()viene invocata la funzione. Elaborerà qual è la tua parola parziale corrente e quindi compgendeterminerà quali opzioni corrispondono. Questi sono memorizzati in un array chiamato COMPREPLYche viene quindi visualizzato. Guarda man completee man compgenper i dettagli.

Per un bel tutorial, dai un'occhiata: Scrivere la tua funzione di completamento Bash




2

Oltre alla risposta di dogbane, potresti anche fare:

complete -W "fooOption barOption" cooltool

se vuoi semplicemente abbinare un elenco di parole dall'inizio della stringa. Sembra che completo e compgen condividano la maggior parte delle opzioni. Ho notato solo la corrispondenza "inizio della stringa" nei comandi che uso, quindi ho trovato pulito che puoi fare altre cose nella funzione _cooltool come:

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

per abbinare ovunque nel nome dell'opzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.