Question

Je suis en train de mettre en place la fin de bash pour un script utilitaire je l'ai écrit, alors j'ai ajouté le script suivant pour /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

Le script mcd-completion-words trouve programmation opérateurs disponibles pour la commande. Lorsque je redémarre bash (ou source du script), je peux onglet complet avec succès, mais si je le fais, je ne peux plus backspace passé un caractère achevé.

En outre, si je tente d'énumérer toutes les options (par exemple je tente d'onglet complète w / pas de mot en place), bash ajoute un onglet à la commande, que je ne peux pas non plus backspace.

Comment puis-je faire bash mimer un comportement normal de la fin du fichier? Toute aide est appréciée. Merci!


Voici une testcase réduite pour mcd d'achèvement des mots qui présente toujours le même comportement. Chose curieuse, le cas de Dennis travaille pour moi aussi (en remplaçant par des mots = « un deux trois », par exemple).

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

print "one two three four five six seven eight nine";
Était-ce utile?

La solution

Voici un test réduit; même une commande `php » vide provoque le comportement d'achèvement erroné:

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

est sur la machine (Ubuntu) avec bash-3.2.48 / bash-4.0.33 & php-5.2.6-3ubuntu4. Sur une autre machine (Debian) avec bash-3.2.39 & php-5.2.6-1 + lenny9, l'achèvement et backspace va bien.

Utilisation perl -e "" au lieu de php -r "" va aussi bien.

Je ne sais pas ce qui se passe, en conflit avec php readline? Peut-être que vous pouvez essayer la liste de diffusion-bash bug?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top