L'achèvement de l'onglet ne fonctionne pas pour les commandes

44

J'essaie d'utiliser l'achèvement de tabulation pour les commandes dans Ubuntu 11.04 Beta 1, en exécutant toutes les dernières mises à jour, mais cela ne semble pas fonctionner. (Bien que le package bash-completion soit installé)

L'achèvement de l'onglet ne fonctionne correctement que pour les répertoires ou les fichiers.

Des idées pour creuser?

    
posée Screatch 04.04.2011 - 11:32
la source

5 réponses

60

Vérifiez si vous avez le fragment suivant dans votre fichier .bashrc (devrait être présent par défaut)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
    
réponse donnée Adam Byrtek 04.04.2011 - 12:23
la source
11

Je pensais aussi ajouter l'explication supplémentaire suivante pour un échec de la complétion de bash - il est trop long pour un commentaire et peut être utile pour quelqu'un qui a un problème avec l'achèvement de bash, car c'est probablement le canonique "général" question à laquelle tous les doublons sont renvoyés.

Même si vous avez la ligne appropriée dans votre .bashrc (comme dans la réponse ci-dessus) et le package bash-completion installé, l’achèvement de bash peut toujours mal fonctionner si vous avez shopt -s nullglob ou shopt -s failglob dans votre .bashrc ou .bash_aliases .

Les scénarios suivants ont été testés avec toutes les personnalisations utilisateur de .bashrc et .bash_aliases supprimées pour donner un test correct, avec la ligne d’achèvement de bash appropriée dans .bashrc present et avec bash-completion installé.

1) Le premier scénario concerne le shopt -s failglob dans votre .bashrc ou .bash_aliases .

Lorsque vous essayez de tabuler des répertoires et des fichiers complets respectivement, ces erreurs se produisent:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Cependant, les commandes s’achèveront toujours avec succès.

2) Lorsque shopt -s nullglob est activé, si vous essayez de compléter un répertoire ou un fichier, cela signifie que tout est répertorié, sans achèvement:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

J'ai coupé court la liste ici, car il était très long et pas nécessaire de tout reproduire.

Encore une fois, l’achèvement de la commande fonctionnera néanmoins.

Donc, supprimer simplement shopt -s failglob ou shopt -s nullglob pourrait également résoudre le problème des erreurs lors de l'achèvement de bash, en supposant que vous ayez la ligne appropriée dans votre .bashrc et bash-completion installé.

    
réponse donnée user76204 24.12.2012 - 16:38
la source
8

En plus de la modification du fichier /etc/bash.bashrc (en d'autres réponses), vous devrez peut-être installer le package bash-completion .

Vérifiez si le fichier /etc/bash_completion existe. Si non:

sudo apt-get install bash-completion

(Dans mon installation de Debian 7, il n’a pas été installé initialement)

    
réponse donnée SergeanT 07.09.2015 - 13:58
la source
6

Aussi simple que cela puisse paraître, assurez-vous que bash est votre shell actif

echo $SHELL

Je viens juste de mettre à niveau vers Ubuntu 14.04.1 LTS et je n’avais pas de complétion automatique des onglets, même après avoir suivi les conseils de ce post, seulement pour réaliser que mon shell était défini sur /bin/sh     

réponse donnée nocdib 19.11.2014 - 16:35
la source
1

Mise à jour vers Ubuntu 14.04.01

Vérifiez si vous avez le fragment suivant dans votre fichier .bashrc (devrait être présent par défaut)

sudo vim /etc/bash.bashrc (tapez "i" pour éditer le fichier)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

Décommentez 7 lignes ci-dessus

Enregistrer le fichier "esc + w + q + enter"

Redémarrer bash

exec bash

    
réponse donnée Diego Arriola 02.09.2014 - 21:25
la source

Lire d'autres questions sur les étiquettes