Bash auto-accomplissement avec des espaces ajoutés - pourquoi et comment réparer?

29

J'utilise l'achèvement de tabulation plus que la saisie de lettres. J'avais l'habitude de taper rm ~/De<TAB> et il serait complété à rm ~/Desktop/ pour que je puisse continuer au niveau suivant.

Récemment, ce comportement a changé. L'achèvement donne maintenant rm ~/Desktop<SPACE> , ce qui signifie que je dois revenir en arrière et taper la barre oblique si je veux continuer. Cela me fait pleurer.

Les modifications semblent se situer dans la fonction _longopt() in /etc/bash_completion , mais c'est tout ce que je peux suivre. Est-ce que ce changement est intentionnel et si oui, à quoi cela sert-il? Puis-je retrouver l'ancien comportement, de préférence par une option de configuration au lieu de simplement copier l'ancien code d'un autre système?

Modifier: la fonction de référence.

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$(  --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*//p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}
    
posée MPi 10.05.2011 - 09:54
la source

3 réponses

22

Ceci est un bogue connu. Voir cette question sur le LP et ces bogues 1 2 .

Ce commentaire semble être la solution. Si vous ne pouvez pas attendre qu'un correctif parvienne aux canaux normaux, modifiez /etc/bash_completion line 1587, modifiez default en filenames (effectuez d'abord une sauvegarde).

    
réponse donnée Christoph 10.05.2011 - 13:17
la source
9

J'ai eu et résolu le même problème après avoir installé Adobe Reader sur Ubuntu 12.04.

J'ai commenté le bloc _filedir dans /etc/bash_completion.d/acroread.sh et cela fonctionnait à nouveau normalement.

    
réponse donnée hiteshradia 02.03.2013 - 18:08
la source
2

J'ai eu le même problème et je l'ai corrigé en supprimant le répertoire /etc/bash_completion.d/, puis en réinstallant bash_completion. Je suppose qu'un ancien fichier était dans ce répertoire ... Espérons que cela résoudra aussi votre problème.

    
réponse donnée PatrickM 12.05.2011 - 14:57
la source

Lire d'autres questions sur les étiquettes