bash impedisce completamento backspace
-
02-10-2019 - |
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";
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?