Ecco una questione connessa e un'altra soluzione suggerita:
How to reset COMP_WORDBREAKS without effecting other completion script?
Come detto prima, la soluzione più semplice è di alterare COMP_WORDBREAKS
. Tuttavia, la modifica di COMP_WORDBREAKS
nello script di completamento non è sicura (poiché è una variabile globale e ha l'effetto collaterale di influire sul comportamento di altri script di completamento, ad esempio scp).
Pertanto, il completamento di bash offre alcuni metodi di supporto che è possibile utilizzare per raggiungere il proprio obiettivo in un modo migliore e più sicuro.
Due metodi di supporto sono stati aggiunti in Bash completion 1.2 per questo:
_get_comp_words_by_ref
con l'-n EXCLUDE
opzione
- ottiene la parola-per-completa senza prendere in considerazione i caratteri escludere per parola rompe
__ltrim_colon_completions
Quindi, ecco un esempio di base di come un gestire due punti (:) in termini di completamento:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
Utilizzando i metodi helper semplifica anche la sceneggiatura completamento e assicura che si ottiene lo stesso comportamento in qualsiasi ambiente (bash-3 o bash-4).
È anche possibile dare un'occhiata agli script di completamento man
o perl
in /etc/bash_completion.d
per vedere come utilizzano i metodi di supporto sopra riportati per risolvere questo problema.
fonte
2012-09-19 13:26:20
Grazie! Questa cosa mi ha infastidito per un po 'di tempo :) – armandino
Un avvertimento che probabilmente non dovresti farlo, in quanto interrompe le funzioni di completamento che si basano sul comportamento predefinito (come scp). Vedi https://bugs.launchpad.net/gvfs/+bug/290784 per la discussione – gfxmonk
Accetto per @gfxmonk, questo non è appropriato in quanto interrompe il completamento per altre funzioni –