Domanda

Sto cercando di impostare il completamento bash per uno script utility che ho scritto, così ho aggiunto il seguente script per /etc/bash_completion.d:

_mcd()
{
    local cur words
    COMPREPLY=()

    cur="${COMP_WORDS[COMP_CWORD]}"
    words=`mcd-completion-words`
    COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
    return 0
}
complete -F _mcd mcd

Lo script mcd-completion-words trova programmazione operatori disponibili per il comando. Quando ho riavviare bash (o sorgente di script), posso con successo scheda completa, ma se lo faccio, non posso più backspace passato un personaggio completato.

Inoltre, se si tenta di elencare tutte le opzioni (ad esempio ho tentativo di scheda completa w / nessuna parola sul posto), bash aggiunge una scheda per il comando, che può anche non backspace.

Come posso fare bash comportamento normale completamento di file mimica? Ogni aiuto è apprezzato. Grazie!


Ecco un testcase ridotta per MCD-completamento Parole che presenta ancora lo stesso comportamento. Curiosamente, il caso di Dennis' funziona anche per me (quando sostituendo le parole = 'uno due tre', per esempio).

#!/usr/bin/env php
<?php

print "one two three four five six seven eight nine";
È stato utile?

Soluzione

Ecco un caso di prove ridotto; anche un comando vuoto `php' fa sì che il comportamento di completamento errato:

$ _mcd() { php -r ""; COMPREPLY=( one ); }
$ complete -F _mcd mcd
$ mcd <TAB>            # Becomes 'mcd one' all right
$ mcd one <BACKSPACE>  # ERROR: doesn't work

Questo è sulla macchina (Ubuntu) sia con bash-3.2.48 / bash-4.0.33 e PHP-5.2.6-3ubuntu4. Su un'altra macchina (Debian) con bash-3.2.39 e PHP-5.2.6-1 + lenny9, completamento e backspace va tutto bene.

Utilizzando perl -e "" invece di php -r "" va anche bene.

Non so cosa sta succedendo, php in conflitto con readline? Forse si può provare mailing list bug-bash?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top